栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android实现图片选择器功能

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android实现图片选择器功能

本文实例为大家分享了Android实现图片选择器功能的具体代码,供大家参考,具体内容如下

图片选择功能用的是GitHub上的依赖库,网址

先来看下我运行的效果图如下所示:

 

该依赖库是Android平台上拍照/录像,图片/视频选择,编辑和压缩的一站式解决方案。

添加依赖,在app->build.gradle里面添加依赖

//图片/视频选择、预览、编辑与拍照
implementation 'com.github.guoxiaoxing:phoenix:1.0.15'

初始化:

public class App extends Application {
 
  @Override
  public void onCreate() {
    super.onCreate();
 
    Phoenix.config()
 .imageLoader(new ImageLoader() {
   @Override
   public void loadImage(Context mContext, ImageView imageView
   , String imagePath, int type) {
     Glide.with(mContext)
  .load(imagePath)
  .into(imageView);
   }
 });
  }
}

开启功能:

 private void callUpSelecter(boolean isCamera, int type, int REQUEST_CODE) {
 
    if (TextUtils.isEmpty(fileID)) {
      Phoenix.with()
   .theme(PhoenixOption.THEME_RED)// 主题
   .fileType(MimeType.ofImage())//显示的文件类型图片、视频、图片和视频
   .maxPickNumber(9)// 最大选择数量
   .minPickNumber(0)// 最小选择数量
   .spanCount(4)// 每行显示个数
   .enablePreview(true)// 是否开启预览
   .enableCamera(isCamera)// 是否开启拍照
   .enableAnimation(false)// 选择界面图片点击效果
   .enableCompress(true)// 是否开启压缩
   .compressPictureFilterSize(300)//多少kb以下的图片不压缩
   .compressVideoFilterSize(2018)//多少kb以下的视频不压缩
   .thumbnailHeight(160)// 选择界面图片高度
   .thumbnailWidth(160)// 选择界面图片宽度
   .enableClickSound(false)// 是否开启点击声音
   .pickedMediaList(add_lists)// 已选图片数据
   .videoFilterTime(0)//显示多少秒以内的视频
   .mediaFilterSize(0)//显示多少kb以下的图片/视频,默认为0,表示不限制
   .start(UploadMorePicActivity.this, type, REQUEST_CODE);
    }
 
  }

获取结果:

 @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 889 && resultCode == RESULT_OK) {//相册
      //返回的数据
      List result = Phoenix.result(data);
      Log.e("=====result==", result.toString());
      add_lists.clear();
      add_lists.addAll(result);
      adapter.updateItems(add_lists);
      btnOkEnable(add_lists);
 
    } else if (requestCode == 899 && resultCode == RESULT_OK) {//拍照
      List result = Phoenix.result(data);
      add_lists.addAll(result);
      adapter.updateItems(add_lists);
      btnOkEnable(add_lists);
    }
  }

recyclerView的适配基类:


public abstract class baseRecyclerAdapter extends RecyclerView.Adapter {
  public onRecyclerViewItemClickListener monItemClickListener = null;
  public onRecyclerViewItemClickListenerData listenerData;
 
  
  protected List mItems;
  protected Context mContext;
 
  
  public baseRecyclerAdapter(Context context) {
    this.mContext = context;
    mItems = new ArrayList<>();
  }
 
  
  public List getList() {
    return mItems;
  }
 
  
  public void addItem(T item) {
    if (item == null) return;
    mItems.add(mItems.size(), item);
    notifyItemInserted(mItems.size());
  }
 
  
  public void addItems(List items) {
    if (items == null) return;
    this.mItems.addAll(items);
 
    notifyDataSetChanged();
  }
 
  public boolean containsAll(List items) {
    return mItems.containsAll(items);
  }
 
  
  public void updateItem(T tasks, int position) {
    if (tasks == null) return;
    mItems.set(position, tasks);
    notifyItemChanged(position);
  }
 
  
  public void updateItems(List items) {
    if (items == null) return;
    this.mItems.clear();
    this.mItems.addAll(items);
    notifyDataSetChanged();
  }
 
  
  public void removeItem(int index) {
    mItems.remove(index);
    notifyItemRemoved(index);
    notifyItemRangeChanged((index - 1) >= 0 ? index - 1 : 0, mItems.size());
  }
 
  public void getView(int position, RecyclerView.ViewHolder viewHolder, int type, T item) {
  }
 
  
  public T getItem(int location) {
    if (mItems == null || mItems.isEmpty()) {
      return null;
    } else {
      return mItems.get(location);
    }
  }
 
  
  @Override
  public int getItemCount() {
    return mItems == null ? 0 : mItems.size();
  }
 
  
  public void clear() {
    mItems.clear();
    notifyDataSetChanged();
  }
 
  public static interface onRecyclerViewItemClickListener {
    void onItemClick(View view, String data);
  }
 
  public void setonItemClickListener(onRecyclerViewItemClickListener listener) {
    this.monItemClickListener = listener;
  }
 
  public interface OnRecyclerViewItemClickListenerData {
    void onItemClickData(View view, T data);
  }
 
  public void setonItemClickListenerData(onRecyclerViewItemClickListenerData listener) {
    listenerData = listener;
  }
}

显示选择的图片的适配器:


 
public class UpLoadMorePicAdapter extends baseRecyclerAdapter {
  
  public UpLoadMorePicAdapter(Context context) {
    super(context);
  }
 
  @Override
  public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view= LayoutInflater.from(mContext).inflate(R.layout.item_upload_more_pic_refresh,parent,false);
    return new ViewHolder(view);
  }
 
  @Override
  public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
    if (holder instanceof ViewHolder){
      final ViewHolder viewHolder= (ViewHolder) holder;
      if(mItems.size()<9&&position==mItems.size()){
 Glide.with(mContext).load(R.mipmap.add_consumer).centerCrop().into(viewHolder.iv_pic);
 
      }else{
 final MediaEntity mediaEntity=mItems.get(position);
   Glide.with(mContext).load(mediaEntity.getLocalPath()).centerCrop().into(viewHolder.iv_pic);
      }
      viewHolder.iv_pic.setonClickListener(new View.onClickListener() {
 @Override
 public void onClick(View v) {
   if (listenerData!=null){
     listenerData.onItemClickData(viewHolder.iv_pic,position);
   }
 }
      });
 
    }
 
  }
 
  @Override
  public int getItemCount() {
    return mItems.size()<9? mItems.size()+1:9;
  }
 
  class ViewHolder extends RecyclerView.ViewHolder{
    private CustomHeightImageView iv_pic;
 
    public ViewHolder(View view) {
      super(view);
      iv_pic= (CustomHeightImageView) view.findViewById(R.id.iv_pic);
    }
  }
}

适配器布局文件:

R.layout.item_upload_more_pic_refresh



 
  

Activity中的代码:

public class UploadMorePicActivity extends AppCompatActivity
{
 private RecyclerView rl_pic;
 private UpLoadMorePicAdapter adapter;
 private List add_lists = new ArrayList<>();
 
 @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 rl_pic = (RecyclerView) findViewById(R.id.rl_pic);
 adapter = new UpLoadMorePicAdapter(this);
 rl_pic.setLayoutManager(new GridLayoutManager(this, 4));
 rl_pic.setAdapter(adapter);
 adapter.updateItems(add_lists);
 adapter.setonItemClickListenerData(new baseRecyclerAdapter.onRecyclerViewItemClickListenerData() {
      @Override
      public void onItemClickData(View view, Object data) {
 int position = (int) data;
 if (position >= add_lists.size()) {
   callUpSelecter(false, PhoenixOption.TYPE_PICK_MEDIA, 889);
 } else {
 }
 
      }
    });
}
private void callUpSelecter(boolean isCamera, int type, int REQUEST_CODE) {
 
    if (TextUtils.isEmpty(fileID)) {
      Phoenix.with()
   .theme(PhoenixOption.THEME_RED)// 主题
   .fileType(MimeType.ofImage())//显示的文件类型图片、视频、图片和视频
   .maxPickNumber(9)// 最大选择数量
   .minPickNumber(0)// 最小选择数量
   .spanCount(4)// 每行显示个数
   .enablePreview(true)// 是否开启预览
   .enableCamera(isCamera)// 是否开启拍照
   .enableAnimation(false)// 选择界面图片点击效果
   .enableCompress(true)// 是否开启压缩
   .compressPictureFilterSize(300)//多少kb以下的图片不压缩
   .compressVideoFilterSize(2018)//多少kb以下的视频不压缩
   .thumbnailHeight(160)// 选择界面图片高度
   .thumbnailWidth(160)// 选择界面图片宽度
   .enableClickSound(false)// 是否开启点击声音
   .pickedMediaList(add_lists)// 已选图片数据
   .videoFilterTime(0)//显示多少秒以内的视频
   .mediaFilterSize(0)//显示多少kb以下的图片/视频,默认为0,表示不限制
   .start(UploadMorePicActivity.this, type, REQUEST_CODE);
    }
 
  }
 @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 889 && resultCode == RESULT_OK) {//相册
      //返回的数据
      List result = Phoenix.result(data);
      Log.e("=====result==", result.toString());
      add_lists.clear();
      add_lists.addAll(result);
      adapter.updateItems(add_lists);
      btnOkEnable(add_lists);
 
    }
 
}

自定义ImageView:

public class CustomHeightImageView extends android.support.v7.widget.AppCompatImageView {
  float scale = 0;
 
  public CustomHeightImageView(Context context) {
    super(context);
  }
 
  public CustomHeightImageView(Context context, float scale) {
    super(context);
    this.scale = scale;
  }
 
  public CustomHeightImageView(Context context, AttributeSet attrs) {
    super(context, attrs);
    TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.CustomHeightRelativeLayout);
    scale = a.getFloat(R.styleable.CustomHeightRelativeLayout_scale, -1f);
//    float scale = a.
  }
 
 
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    if (scale == -1) {
      super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    } else {
      super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(
   (int) (MeasureSpec.getSize(widthMeasureSpec) * (scale)),
   MeasureSpec.getMode(widthMeasureSpec)));
    }
 
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/155764.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号