为了账号安全,请及时绑定邮箱和手机立即绑定
  • aaaa
    查看全部
  • popwindow的布局
    查看全部
  • 单例模式双判断
    查看全部
    0 采集 收起 来源:单例模式

    2015-10-13

  • 双重判断,提高效率
    查看全部
    0 采集 收起 来源:单例模式

    2015-10-12

  • ExecuterService 线程池
    查看全部
  • 两点需要优化: 1.看一下微信的图片选择器,在点击底部布局弹出popupWindow时,底部布局以及上面的APP title并不会变暗 2.popupWindow弹出的listView每一项都有后面的一个勾,这个勾不是始终勾上的,只有在点击listView时才会打钩。
    查看全部
    0 采集 收起 来源:项目总结

    2015-10-10

  • 为popupWindow设置动画效果 1.anim中创建两个动画xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="0" android:fromYDelta="100%" android:toYDelta="0" android:duration="200" /> </set> 2.style.xml添加对应的动画变量 <style name="dir_popupwindow_anim"> <item name="android:windowEnterAnimation">@anim/slide_up</item> <item name="android:windowExitAnimation">@anim/slide_down</item> </style> 3.MainActivity中为控件设置动画 mDirPopupWindow.setAnimationStyle(R.style.dir_popupwindow_anim);
    查看全部
    0 采集 收起 来源:代码调试

    2018-03-22

  • 为popupWindow添加一个动画 1.在res/anim/下创建两个动画 slide_up和slide_down <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="0" android:fromYDelta="100%" android:toYDelta="0" android:duration="200" /> </set> 2.style.xml添加对应的动画 <style name="dir_popupwindow_anim"> <item name="android:windowEnterAnimation">@anim/slide_up</item> <item name="android:windowExitAnimation">@anim/slide_down</item> </style> 3.在MainActivity中启动popupWindow时就要设置前面的动画 mDirPopupWindow.setAnimationStyle(R.style.dir_popupwindow_anim);
    查看全部
    0 采集 收起 来源:代码调试

    2018-03-22

  • 通过接口回调实现ListView中item的选择事件 6.回调MainActivity中,为popupWindow设置一个监听 利用传入的folderBean变量,更新GridView中的数据 mDirPopupWindow.setOnDirSelectedListener(new ListImageDirPopupWindow.OnDirSelectedListener() { @Override public void onSelected(FolderBean folderBean) { mCurrentDir = new File(folderBean.getDir()); mImgs = Arrays.asList(mCurrentDir.list(new FilenameFilter() { …… })); mImageAdapter = new ImageAdapter(MainActivity.this, mImgs, mCurrentDir.getAbsolutePath()); mGridView.setAdapter(mImageAdapter); mDirName.setText(folderBean.getName()); mDirCount.setText(folderBean.getCount() + ""); mDirPopupWindow.dismiss(); } }); 7.两个小改动 (1)FolderBean类中的setDir(),目录路径名应该是最后一个/后面的字符串 int lastIndexOf = this.dir.lastIndexOf("/") + 1; this.name = this.dir.substring(lastIndexOf); (2)popupWindow中的listView每个item的布局文件中左边的ImageView android:scaleType="fitXY" http://blog.csdn.net/larryl2003/article/details/6919513
    查看全部
  • 通过接口回调实现ListView中item的选择事件 1.先说一下解耦 简单讲就是解除耦合,耦合就是两个体系或两种运动形式相互作用而联合起来的现象。解除耦合就是将两者分离开来单独分析,来降低两者的依存性。 这里要将MainActivity和PopupWindow解耦,就是降低它们的耦合度 2.主要思路: 在ListImageDirPopupWindow的initEvent()中为ListView设置OnItemClickListener接口,然后设置一个接口回调到MainActivity中。在MainActivity设置这个接口的监听,最终回调到MainActivity的具体实现。 这样的话,两者就解耦了,MainActivity设置了接口监听,它才能知道popupWindow中发生的回调。 参考UI模板中的接口回调:http://www.imooc.com/space/note/cid/247 接下来看实现。 3.创建一个接口,类似于mButton.setOnClickListener(new OnClickListener(){})的OnClickListener接口 public interface OnDirSelectedListener{ //mListView的接口回调,参数中包含了当前图片目录 public void onSelected(FolderBean folderBean); } 4.创建设置监听接口的方法,类似于setOnClickListener() public OnDirSelectedListener mListener; public void setOnDirSelectedListener(OnDirSelectedListener listener){ this.mListener = listener; } 5.为ListView设置监听,代码如图 这样MainActivity想要监听的话就要调用setOnDirSelectedListener(OnDirSelectedListener listener)传入它的listener,当选中item时就会回调到MainActivity中的实现 mListener.onSelected(mDatas.get(position));
    查看全部
  • 初始化popupWindow点击事件 1.在MainActivity中,initDatas()这个方法是扫描所有的图片,其中已经得到了popupWindow的数据源集合 mFolderBeans.add(folderBean); //popwindow的数据源集合 扫描完成后通知主线程加载数据源到View中去,在handleMessage()中初始化popupWindow initDirPopupWindow(); //初始化popupWindow,加载数据源到ListView中 2.initDirPopupWindow()中需要设置一个dismiss事件,作用在于popupWindow消失/出现时,背景需要变亮/变暗 private void initDirPopupWindow() { mDirPopupWindow = new ListImageDirPopupWindow(this, mFolderBeans); mDirPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { public void onDismiss() { lightOn(); } }); } 3.内容区域变亮 private void lightOn() { WindowManager.LayoutParams lp = getWindow().getAttributes(); //得到window的布局参数 lp.alpha = 1.0f; getWindow().setAttributes(lp); } 变暗的方法类似 4.为popupWindow添加点击事件 private void initEvent() { mBottomLy.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { mDirPopupWindow.showAsDropDown(mBottomLy, 0, 0); //设置显示位置为底部 lightOff(); } }); }
    查看全部
  • 初始化控件 1.initViews()方法 private void initViews(Context context) { mListView = (ListView) mConvertView.findViewById(R.id.id_list_dir); mListView.setAdapter(new ListDirAdapter(context, mDatas)); } 注意这里传入了context参数 2.在popupWindow中创建一个ListDirAdapter类,作为ListView的adapter private class ListDirAdapter extends ArrayAdapter<FolderBean> (1)构造函数 public ListDirAdapter(Context context, List<FolderBean> objects) { super(context, 0, objects); mFlater = LayoutInflater.from(context); } (2)getView()方法,也是通过ViewHolder的文艺式 private class ViewHolder{ ImageView mImg; TextView mDirName; TextView mDirCount; } (2)初始设置 FolderBean bean = getItem(position); //得到当前位置的FolderBean holder.mImg.setImageResource(R.mipmap.pictures_no); //初始设置 (3)为当前item的三个控件设置内容 ImageLoader.getInstance(3,ImageLoader.Type.LIFO).loadImage(bean.getFirstImgPath(), holder.mImg); holder.mDirName.setText(bean.getName()); holder.mDirCount.setText(bean.getCount());
    查看全部
    0 采集 收起 来源:初始化控件

    2018-03-22

  • popupWindow的变量和构造方法 1.新建一个类集成PopupWindow,实现popup window 2.这个popupWindow需要完成: (1)宽和高 private void calWidthAndHeight(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); mWidth = outMetrics.widthPixels; mHeight = (int) (outMetrics.heightPixels * 0.7); } (2)将popupWindow的布局文件inflate成View mConvertView = LayoutInflater.from(context).inflate(R.layout.popup_main, null); (3)还有一些属性的设置 setFocusable(true); setTouchable(true); setOutsideTouchable(true); //可以点击popupWindow的其他区域 setBackgroundDrawable(new BitmapDrawable()); (4)设置点击外部区域的操作 setTouchInterceptor(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_OUTSIDE){ dismiss(); return true; } return false; } });
    查看全部
  • 保存选中的图片——每个图片ImageView的点击事件 1.为了更方便的处理点击事件,需要将ImageAdapter类独立出来 创建一个静态Set集合来保存选中的图片 private static Set<String> mSeletedImg = new HashSet<String>(); 2.给每个ImageView设置一个点击事件 viewHolder.mImg.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if (mSeletedImg.contains(filePath)){ //已经被选择 mSeletedImg.remove(filePath); viewHolder.mImg.setColorFilter(null); viewHolder.mSelect.setImageResource(R.mipmap.picture_unselected); }else { mSeletedImg.add(filePath); viewHolder.mImg.setColorFilter(Color.parseColor("#77000000")); viewHolder.mSelect.setImageResource(R.mipmap.pictures_selected); } //notifyDataSetChanged(); } }); 3.判断每个图片是否处于被选中的状态 if (mSeletedImg.contains(filePath)){ viewHolder.mImg.setColorFilter(Color.parseColor("#77000000")); viewHolder.mSelect.setImageResource(R.mipmap.pictures_selected); } 4.需要注意notifyDataSetChanged()每次都要刷新数据,所以只要点击图片会有闪频现象,改进一下: 在判断当前图片是否被选中时就做处理(见第2点)
    查看全部
    0 采集 收起 来源:保存选中图片

    2018-03-22

  • 适配器 1.图片扫描完成后就要通知主线程,加载数据源到GridView中 private android.os.Handler mHandler = new android.os.Handler(){ public void handleMessage(Message msg) { if(msg.what == DATA_LOADED){ mProgressDialog.dismiss(); //绑定数据源到GridView中 data2View(); } } }; data2View()是加载数据源到gridView中的方法 2.接下来就要为GridView创建一个ImageAdapter,重点是getView()方法是对每个Item而言的 (1)GridView中的item布局是一个RelativeLayout,包含一个ImageView和一个ImageButton (2)通过ViewHolder(文艺式)完成getView() http://www.imooc.com/space/note/uid/1859625/t/my/cid/365 (3)最后要注意(如图) ImageLoader.getInstance(3, ImageLoader.Type.LIFO).loadImage(mDirPath + "/" +mImgPaths.get(position), viewHolder.mImg); 传入的参数为图片的路径地址,以及对应要填充进去的ImageView 3.回到主线程的handleMessage()中,图片扫描完之后就要创建GridView对应的ImageAdapter,然后加载 mImgs = Arrays.asList(mCurrentDir.list()); //得到当前目录下所有的图片名的集合 mImageAdapter = new ImageAdapter(this, mImgs, mCurrentDir.getAbsolutePath()); //GridView对应的adapter mGridView.setAdapter(mImageAdapter); //setAdapter()会将每个item的View显示到GridView中。
    查看全部
    0 采集 收起 来源:适配器

    2018-03-22

举报

0/150
提交
取消
课程须知
1.掌握Java基础 2.熟练掌握Android常用技术
老师告诉你能学到什么?
1.单例模式在项目中的实践 2.图片的缓存与压缩 3.线程轮询与并行 4.反射机制在Android中的使用 5.Handler-线程间通信

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!