图片选择器
来源:互联网 发布:淘宝店有流量没销量 编辑:程序博客网 时间:2024/05/21 11:28
1.ImageLoader
package com.example.administrator.myapplication;import android.content.Context;import android.graphics.Color;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageButton;import android.widget.ImageView;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Set;/** * Created by Administrator on 2017/8/10 0010. */public class ImageAdapter extends BaseAdapter { public static Set<String> mSelectImgs = new HashSet<>(); private String mDirPath; private List<String> mImgPaths; private LayoutInflater mInflater; /** * 图片名和路径分开存储可以节省内存 * * @param context * @param mDatas 存储图片的名字 * @param dirPath 存储图片的路径 */ public ImageAdapter(Context context, List<String> mDatas, String dirPath) { this.mDirPath = dirPath; this.mImgPaths = mDatas; mInflater = LayoutInflater.from(context); } @Override public int getCount() { return mImgPaths.size(); } @Override public Object getItem(int i) { return mImgPaths.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(final int position, View view, ViewGroup parent) { final ViewHolder viewHolder; if (view == null) { view = mInflater.inflate(R.layout.item_grideview, parent, false); viewHolder = new ViewHolder(); viewHolder.mImag = (ImageView) view.findViewById(R.id.id_item_image); viewHolder.mSelect = (ImageButton) view.findViewById(R.id.id_item_select); view.setTag(viewHolder); } else { viewHolder = (ViewHolder) view.getTag(); } //重置状态 换屏时为初始状态 viewHolder.mImag.setImageResource(R.mipmap.pictures_no); viewHolder.mSelect.setImageResource(R.mipmap.picture_unselected); viewHolder.mImag.setColorFilter(null); final String filePath = mDirPath + "/" + mImgPaths.get(position); viewHolder.mImag.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //已经被选择 if (mSelectImgs.contains(filePath)) { mSelectImgs.remove(filePath); viewHolder.mImag.setColorFilter(null); viewHolder.mSelect.setImageResource(R.mipmap.pictures_no); }else{//没有被选择 mSelectImgs.add(filePath); viewHolder.mImag.setColorFilter(Color.parseColor("#77000000")); viewHolder.mSelect.setImageResource(R.mipmap.pictures_selected); } Iterator<String> iterator=mSelectImgs.iterator(); while(iterator.hasNext()){ Log.e("zm",iterator.next()); } } }); if(mSelectImgs.contains(filePath)){ viewHolder.mImag.setColorFilter(Color.parseColor("#77000000")); viewHolder.mSelect.setImageResource(R.mipmap.pictures_selected); } ImageLoader.getInstance(3, ImageLoader.Type.LIFO).loadImage(mDirPath + "/" + mImgPaths.get(position), viewHolder.mImag); return view; } private class ViewHolder { ImageView mImag; ImageButton mSelect; }}2.MainActivity
package com.example.administrator.myapplication;import android.app.ProgressDialog;import android.content.ContentResolver;import android.database.Cursor;import android.net.Uri;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.provider.MediaStore;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.view.WindowManager;import android.widget.GridView;import android.widget.ImageView;import android.widget.PopupWindow;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;import java.io.File;import java.io.FilenameFilter;import java.util.ArrayList;import java.util.Arrays;import java.util.HashSet;import java.util.List;import java.util.Random;import java.util.Set;public class MainActivity extends AppCompatActivity { int index; private GridView mGridView; private ImageAdapter mImgAdapter; /** * 存储图片的名称 */ private List<String> mImgs; private RelativeLayout mBottomLy; private TextView mDirName; private TextView mDirCount; private File mCurrentDir; private int mMaxCount; /** * mFolderBeans:几个文件夹 */ private List<FolderBean> mFolderBeans = new ArrayList<>(); private ProgressDialog mProgressDialog; private ListImageDirPopuoWindow mListImageDirPopuoWindow; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { mProgressDialog.dismiss(); //绑定数据到View中 data2View(); initDirPopupWindow(); } }; private void initDirPopupWindow() { mListImageDirPopuoWindow = new ListImageDirPopuoWindow(getApplicationContext(),mFolderBeans); mListImageDirPopuoWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { lightOn(); } }); mListImageDirPopuoWindow.setOnSelect(new ListImageDirPopuoWindow.OnDirSelectListener() { @Override public void onSelected(FolderBean folderBean) { mCurrentDir = new File(folderBean.getDir()); mImgs = Arrays.asList(mCurrentDir.list(new FilenameFilter() { @Override public boolean accept(File file, String fileName) { if(fileName.endsWith(".jpg") ||fileName.endsWith(".jpeg") ||fileName.endsWith(".png")){ return true; } return false; } })); mImgAdapter = new ImageAdapter(MainActivity.this,mImgs,mCurrentDir.getAbsolutePath()); mGridView.setAdapter(mImgAdapter); mDirCount.setText(mImgs.size()+""); mDirName.setText(mCurrentDir.getName()); mListImageDirPopuoWindow.dismiss(); } }); } /** * 内容区域变亮 */ private void lightOn() { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = 1.0f; getWindow().setAttributes(lp); } /** * 内容区域变暗 */ private void lightOff() { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = .3f; getWindow().setAttributes(lp); } /** * 绑定数据到View中 */ private void data2View() { if (mCurrentDir == null) { Toast.makeText(getApplicationContext(), "未扫描到任何图片", Toast.LENGTH_SHORT).show(); return; } mImgs = Arrays.asList(mCurrentDir.list()); mImgAdapter = new ImageAdapter(MainActivity.this, mImgs, mCurrentDir.getAbsolutePath()); mGridView.setAdapter(mImgAdapter); mDirCount.setText(mMaxCount + ""); mDirName.setText(mCurrentDir.getName()); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); initDatas(); initEvens(); } private void initViews() { mGridView = (GridView) findViewById(R.id.id_grideview); mBottomLy = (RelativeLayout) findViewById(R.id.id_bottom_ly); mDirName = (TextView) findViewById(R.id.id_dir_name); mDirCount = (TextView) findViewById(R.id.id_dir_count); } private void initDatas() { if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { Toast.makeText(getApplicationContext(), "当前存储卡不可用", Toast.LENGTH_SHORT).show(); return; } mProgressDialog = ProgressDialog.show(this, null, "正在加载..."); new Thread() { @Override public void run() { super.run(); //拿到有图片的uri Uri mImgUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; ContentResolver cr = MainActivity.this.getContentResolver(); //获取一个游标 Cursor cursor = cr.query(mImgUri, null, MediaStore.Images.Media.MIME_TYPE + "=? or " + MediaStore.Images.Media.MIME_TYPE + "=?", new String[]{"image/jpeg", "image/png"}, MediaStore.Images.Media.DATE_MODIFIED); //放置已经扫描过得文件夹路径 Set<String> mDirPaths = new HashSet<String>(); while (cursor.moveToNext()) { String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); File parentFile = new File(path).getParentFile(); if (parentFile == null) { continue; } String dirPath = parentFile.getAbsolutePath(); FolderBean folderBean = null; //防止重复扫描一个文件夹 if (mDirPaths.contains(dirPath)) { continue; } else { mDirPaths.add(dirPath); folderBean = new FolderBean(); folderBean.setDir(dirPath); folderBean.setFirstImgPath(path); } if (parentFile.list() == null) continue; int picSize = parentFile.list(new FilenameFilter() {//过滤文件 @Override public boolean accept(File file, String fileName) { if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg") || fileName.endsWith(".png")) return true; return false; } }).length; folderBean.setCount(picSize); mFolderBeans.add(folderBean); if (picSize > mMaxCount) { mMaxCount = picSize; mCurrentDir = parentFile; } } cursor.close(); //通知mHandler图片扫描完成 0x100:为任意值 mHandler.sendEmptyMessage(0x100); } }.start(); } private void initEvens() { mBottomLy.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mListImageDirPopuoWindow.setAnimationStyle(R.style.dir_popupwindow_anim); mListImageDirPopuoWindow.showAsDropDown(mBottomLy,0,0); //内容背景变黑 lightOff(); } }); } }3.ImageAdapter
package com.example.administrator.myapplication;import android.content.Context;import android.graphics.Color;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageButton;import android.widget.ImageView;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Set;/** * Created by Administrator on 2017/8/10 0010. */public class ImageAdapter extends BaseAdapter { public static Set<String> mSelectImgs = new HashSet<>(); private String mDirPath; private List<String> mImgPaths; private LayoutInflater mInflater; /** * 图片名和路径分开存储可以节省内存 * * @param context * @param mDatas 存储图片的名字 * @param dirPath 存储图片的路径 */ public ImageAdapter(Context context, List<String> mDatas, String dirPath) { this.mDirPath = dirPath; this.mImgPaths = mDatas; mInflater = LayoutInflater.from(context); } @Override public int getCount() { return mImgPaths.size(); } @Override public Object getItem(int i) { return mImgPaths.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(final int position, View view, ViewGroup parent) { final ViewHolder viewHolder; if (view == null) { view = mInflater.inflate(R.layout.item_grideview, parent, false); viewHolder = new ViewHolder(); viewHolder.mImag = (ImageView) view.findViewById(R.id.id_item_image); viewHolder.mSelect = (ImageButton) view.findViewById(R.id.id_item_select); view.setTag(viewHolder); } else { viewHolder = (ViewHolder) view.getTag(); } //重置状态 换屏时为初始状态 viewHolder.mImag.setImageResource(R.mipmap.pictures_no); viewHolder.mSelect.setImageResource(R.mipmap.picture_unselected); viewHolder.mImag.setColorFilter(null); final String filePath = mDirPath + "/" + mImgPaths.get(position); viewHolder.mImag.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //已经被选择 if (mSelectImgs.contains(filePath)) { mSelectImgs.remove(filePath); viewHolder.mImag.setColorFilter(null); viewHolder.mSelect.setImageResource(R.mipmap.pictures_no); }else{//没有被选择 mSelectImgs.add(filePath); viewHolder.mImag.setColorFilter(Color.parseColor("#77000000")); viewHolder.mSelect.setImageResource(R.mipmap.pictures_selected); } Iterator<String> iterator=mSelectImgs.iterator(); while(iterator.hasNext()){ Log.e("zm",iterator.next()); } } }); if(mSelectImgs.contains(filePath)){ viewHolder.mImag.setColorFilter(Color.parseColor("#77000000")); viewHolder.mSelect.setImageResource(R.mipmap.pictures_selected); } ImageLoader.getInstance(3, ImageLoader.Type.LIFO).loadImage(mDirPath + "/" + mImgPaths.get(position), viewHolder.mImag); return view; } private class ViewHolder { ImageView mImag; ImageButton mSelect; }}4.ListImageDirPopupWindow
package com.example.administrator.myapplication;import android.content.Context;import android.graphics.drawable.BitmapDrawable;import android.support.annotation.IdRes;import android.support.annotation.LayoutRes;import android.support.annotation.NonNull;import android.support.annotation.Nullable;import android.util.DisplayMetrics;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.WindowManager;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.PopupWindow;import android.widget.TextView;import java.util.List;/** * Created by Administrator on 2017/8/11 0011. */public class ListImageDirPopuoWindow extends PopupWindow { private int mWidth; private int mHeight; private View mConvertView; private List<FolderBean> mDatas; private OnDirSelectListener mOnDirSelectListener; ListView mListView; /** * 定义接口回调 */ public interface OnDirSelectListener { void onSelected(FolderBean folderBean); } public void setOnSelect(OnDirSelectListener mOnDirSelectListener) { this.mOnDirSelectListener = mOnDirSelectListener; } public ListImageDirPopuoWindow(Context context, List<FolderBean> mDatas) { calWidthAndHeight(context); mConvertView = LayoutInflater.from(context).inflate(R.layout.popup_main, null); this.mDatas = mDatas; setContentView(mConvertView); setWidth(mWidth); setHeight(mHeight); setFocusable(true); setTouchable(true); //外部可点击 setOutsideTouchable(true); //点击外面的区域使popupWindow消失 setBackgroundDrawable(new BitmapDrawable()); setTouchInterceptor(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { if (motionEvent.getAction() == MotionEvent.ACTION_OUTSIDE) { dismiss(); return true; } return false; } }); initViews(context); initEvens(); } private void initViews(Context context) { mListView = mConvertView.findViewById(R.id.id_list_dir); mListView.setAdapter(new ListDirAdapter(context, mDatas)); } private void initEvens() { mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { if (mOnDirSelectListener != null) { mOnDirSelectListener.onSelected(mDatas.get(i)); } } }); } /** * 计算popupWindow的宽度和高度 * * @param context */ 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); } private class ListDirAdapter extends ArrayAdapter<FolderBean> { private LayoutInflater mInflater; private List<FolderBean> mDatas; public ListDirAdapter(@NonNull Context context, @NonNull List<FolderBean> objects) { super(context, 0, objects); mDatas = objects; mInflater = LayoutInflater.from(context); } @NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.item_popup, parent, false); holder.mImg = convertView.findViewById(R.id.id_id_dir_item_image); holder.mDirName = convertView.findViewById(R.id.id_dir_item_name); holder.mDirCount = convertView.findViewById(R.id.tv_count); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } FolderBean bean = getItem(position); //重置 holder.mImg.setImageResource(R.mipmap.pictures_no); //回调加载 ImageLoader.getInstance().loadImage(bean.getFirstImgPath(), holder.mImg); holder.mDirName.setText(bean.getName()); holder.mDirCount.setText(bean.getCount() + ""); return convertView; } private class ViewHolder { ImageView mImg; TextView mDirName; TextView mDirCount; } }}5.主要布局文件
1.activity_main
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff"> <GridView android:layout_above="@+id/id_bottom_ly" android:id="@+id/id_grideview" android:layout_width="match_parent" android:layout_height="match_parent" android:cacheColorHint="@android:color/transparent" android:horizontalSpacing="3dp" android:listSelector="@android:color/transparent" android:numColumns="3" android:stretchMode="columnWidth" android:verticalSpacing="3dp" /> <RelativeLayout android:id="@+id/id_bottom_ly" android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:background="#ee000000" android:clipChildren="true"> <TextView android:id="@+id/id_dir_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:paddingLeft="10dp" android:text="所有图片" android:textColor="@android:color/white" /> <TextView android:id="@+id/id_dir_count" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:paddingRight="10dp" android:text="100张" android:textColor="@android:color/white" /> </RelativeLayout>> </RelativeLayout>
2.item_grideview
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!--centerCrop :防止图片变形--> <ImageView android:id="@+id/id_item_image" android:layout_width="match_parent" android:layout_height="100dp" android:scaleType="centerCrop" android:src="@mipmap/pictures_no" /> <ImageButton android:id="@+id/id_item_select" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="3dp" android:layout_marginTop="3dp" android:background="@null" android:clickable="false" android:src="@mipmap/picture_unselected" /></RelativeLayout>
3.item_popup
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ffffff" android:padding="5dp"> <!--centerCrop :防止图片变形--> <ImageView android:id="@+id/id_id_dir_item_image" android:layout_width="100dp" android:layout_height="100dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:background="@mipmap/pic_dir" android:paddingBottom="17dp" android:paddingLeft="12dp" android:paddingRight="12dp" android:paddingTop="9dp" android:scaleType="fitXY" android:src="@mipmap/ic_launcher" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="12dp" android:layout_toRightOf="@+id/id_id_dir_item_image" android:orientation="vertical"> <TextView android:id="@+id/id_dir_item_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="所有图片" android:textSize="10dp" /> <TextView android:id="@+id/tv_count" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="100张" android:textColor="#444" android:textSize="10dp" /> </LinearLayout> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="20dp" android:src="@mipmap/dir_choose" /></RelativeLayout>4.popup_main
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/id_list_dir" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="#eee3d9" android:dividerHeight="1dp" /></LinearLayout>5.tv
<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:background="@drawable/tv_bg" android:textColor="#5BC4ED" android:text="Helloworld" ></TextView>6.自定义动画
1.splide_up
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="200" android:fromXDelta="0" android:toXDelta="0" android:fromYDelta="100%" android:toYDelta="0" /></set>
2.splide_down
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="200" android:fromXDelta="0" android:toXDelta="0" android:fromYDelta="0" android:toYDelta="100%" /></set>
7.style
<style name="dir_popupwindow_anim"> <item name="android:windowEnterAnimation">@anim/splide_up</item> <item name="android:windowExitAnimation">@anim/splide_down</item></style>
源码地址:http://download.csdn.net/download/qq_34123326/9929894
阅读全文
0 0
- 图片选择器
- 图片选择器
- 图片选择器
- 图片选择器
- 图片选择器
- 图片选择器
- 图片选择器
- 图片选择器
- 图片选择器
- 图片选择器
- 图片选择器
- 图片选择器
- 后台处理图片选择器
- t图片选择器
- Android图片选择器
- 高仿微信本地图片选择器
- 微信图片选择器
- Android 图片选择器
- Web网站架构的高并发实现
- Angular2中如何使用jquery
- 微信商城签到天数sql语句
- Tomcat 调试超时修改,was unable to start within 45 seconds.
- 566. Reshape the Matrix(Java)
- 图片选择器
- MDK硬件调试_在Debug printf Viewer窗口显示打印信息_ITM
- 素数打表
- 下载书籍最方便的做法就是在谷歌中输入你想学的技术的英文名然后空格加 PDF
- select 经过 easyui combobox 渲染后的onchange事件
- QAQ & 君临天下 || 天行九歌 (河南省多校联萌(三)题目E)
- CCNA复习
- mysql学习----行锁\表锁
- mysql查询今天、昨天、7天、近30天、本月、上一月 数据