Android實(shí)現(xiàn)圖片選擇器功能

本文實(shí)例為大家分享了Android實(shí)現(xiàn)圖片選擇器功能的具體代碼,供大家參考,具體內(nèi)容如下

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出東興免費(fèi)做網(wǎng)站回饋大家。

圖片選擇功能用的是GitHub上的依賴庫(kù),網(wǎng)址

先來看下我運(yùn)行的效果圖如下所示:

Android實(shí)現(xiàn)圖片選擇器功能

 Android實(shí)現(xiàn)圖片選擇器功能

該依賴庫(kù)是Android平臺(tái)上拍照/錄像,圖片/視頻選擇,編輯和壓縮的一站式解決方案。

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

//圖片/視頻選擇、預(yù)覽、編輯與拍照
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)// 最大選擇數(shù)量
          .minPickNumber(0)// 最小選擇數(shù)量
          .spanCount(4)// 每行顯示個(gè)數(shù)
          .enablePreview(true)// 是否開啟預(yù)覽
          .enableCamera(isCamera)// 是否開啟拍照
          .enableAnimation(false)// 選擇界面圖片點(diǎn)擊效果
          .enableCompress(true)// 是否開啟壓縮
          .compressPictureFilterSize(300)//多少kb以下的圖片不壓縮
          .compressVideoFilterSize(2018)//多少kb以下的視頻不壓縮
          .thumbnailHeight(160)// 選擇界面圖片高度
          .thumbnailWidth(160)// 選擇界面圖片寬度
          .enableClickSound(false)// 是否開啟點(diǎn)擊聲音
          .pickedMediaList(add_lists)// 已選圖片數(shù)據(jù)
          .videoFilterTime(0)//顯示多少秒以內(nèi)的視頻
          .mediaFilterSize(0)//顯示多少kb以下的圖片/視頻,默認(rèn)為0,表示不限制
          .start(UploadMorePicActivity.this, type, REQUEST_CODE);
    }
 
  }

獲取結(jié)果:

 @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 889 && resultCode == RESULT_OK) {//相冊(cè)
      //返回的數(shù)據(jù)
      List<MediaEntity> 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<MediaEntity> result = Phoenix.result(data);
      add_lists.addAll(result);
      adapter.updateItems(add_lists);
      btnOkEnable(add_lists);
    }
  }

recyclerView的適配基類:

/**
 * recyclerView適配器基類
 */
public abstract class BaseRecyclerAdapter<T> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
  public OnRecyclerViewItemClickListener mOnItemClickListener = null;
  public OnRecyclerViewItemClickListenerData listenerData;
 
  /**
   * 數(shù)據(jù)集合
   */
  protected List<T> mItems;
  protected Context mContext;
 
  /**
   * 構(gòu)造函數(shù)
   */
  public BaseRecyclerAdapter(Context context) {
    this.mContext = context;
    mItems = new ArrayList<>();
  }
 
  /**
   * 返回?cái)?shù)據(jù)集
   */
  public List<T> getList() {
    return mItems;
  }
 
  /**
   * 添加單條數(shù)據(jù)
   */
  public void addItem(T item) {
    if (item == null) return;
    mItems.add(mItems.size(), item);
    notifyItemInserted(mItems.size());
  }
 
  /**
   * 追加數(shù)據(jù)集合
   */
  public void addItems(List<T> items) {
    if (items == null) return;
    this.mItems.addAll(items);
 
    notifyDataSetChanged();
  }
 
  public boolean containsAll(List<T> items) {
    return mItems.containsAll(items);
  }
 
  /**
   * 更新指定行數(shù)據(jù)
   */
  public void updateItem(T tasks, int position) {
    if (tasks == null) return;
    mItems.set(position, tasks);
    notifyItemChanged(position);
  }
 
  /**
   * 更新全部數(shù)據(jù)
   */
  public void updateItems(List<T> items) {
    if (items == null) return;
    this.mItems.clear();
    this.mItems.addAll(items);
    notifyDataSetChanged();
  }
 
  /**
   * 移除指定行數(shù)據(jù)
   */
  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) {
  }
 
  /**
   * 返回指定行數(shù)據(jù)
   */
  public T getItem(int location) {
    if (mItems == null || mItems.isEmpty()) {
      return null;
    } else {
      return mItems.get(location);
    }
  }
 
  /**
   * 返回?cái)?shù)據(jù)集合總數(shù)
   */
  @Override
  public int getItemCount() {
    return mItems == null ? 0 : mItems.size();
  }
 
  /**
   * 清除全部數(shù)據(jù)
   */
  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<T> {
    void onItemClickData(View view, T data);
  }
 
  public void setOnItemClickListenerData(OnRecyclerViewItemClickListenerData listener) {
    listenerData = listener;
  }
}

顯示選擇的圖片的適配器:

/**
 * Created by YuShuangPing on 2018/7/16.
 */
 
public class UpLoadMorePicAdapter extends BaseRecyclerAdapter<MediaEntity> {
  /**
   * 構(gòu)造函數(shù)
   *
   * @param context
   */
  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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal">
 
  <com.sinosig.ygqd.widget.CustomHeightImageView
    android:id="@+id/iv_pic"
    android:layout_width="230px"
    android:layout_height="230px"
    android:layout_marginBottom="28.8px"
    app:scale="1" />
</LinearLayout>

Activity中的代碼:

public class UploadMorePicActivity extends AppCompatActivity
{
 private RecyclerView rl_pic;
 private UpLoadMorePicAdapter adapter;
 private List<MediaEntity> 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)// 最大選擇數(shù)量
          .minPickNumber(0)// 最小選擇數(shù)量
          .spanCount(4)// 每行顯示個(gè)數(shù)
          .enablePreview(true)// 是否開啟預(yù)覽
          .enableCamera(isCamera)// 是否開啟拍照
          .enableAnimation(false)// 選擇界面圖片點(diǎn)擊效果
          .enableCompress(true)// 是否開啟壓縮
          .compressPictureFilterSize(300)//多少kb以下的圖片不壓縮
          .compressVideoFilterSize(2018)//多少kb以下的視頻不壓縮
          .thumbnailHeight(160)// 選擇界面圖片高度
          .thumbnailWidth(160)// 選擇界面圖片寬度
          .enableClickSound(false)// 是否開啟點(diǎn)擊聲音
          .pickedMediaList(add_lists)// 已選圖片數(shù)據(jù)
          .videoFilterTime(0)//顯示多少秒以內(nèi)的視頻
          .mediaFilterSize(0)//顯示多少kb以下的圖片/視頻,默認(rèn)為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) {//相冊(cè)
      //返回的數(shù)據(jù)
      List<MediaEntity> 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)));
    }
 
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

文章標(biāo)題:Android實(shí)現(xiàn)圖片選擇器功能
網(wǎng)站網(wǎng)址:http://muchs.cn/article20/jpegco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司用戶體驗(yàn)、網(wǎng)站改版網(wǎng)站制作、自適應(yīng)網(wǎng)站、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)