Android GridView 위 챗 모방 멀 티 그래 픽 추가

본 논문 의 사례 는 GridView 가 위 챗 을 모방 하여 다 중 그림 효 과 를 보 여 주 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
밤 관례,GIF 먼저 올 리 기

프로젝트 에 ⑨ 그림 을 추가 하 는 효 과 는 매우 흔 할 것 입 니 다.뒤에 추 가 된 버튼 이 있 으 면 어떻게 실현 해 야 합 니까?이것 은 일부 하 얀 사람 을 미 치 게 할 수도 있 습 니 다.자,차 갑 게 데 리 고 날 아 갑 니 다.걸 어 갑 니 다~라 라 라 라...
이륙 하기 전에 먼저 말씀 드 리 겠 습 니 다.본 편 은 구 궁 격 에 그림 을 추가 하 는 효 과 를 설명 할 뿐 입 니 다.그림 을 선택 하 는 효 과 는 다른 사람 이 쓴 창고 입 니 다.저 는 그림 을 선택 하 는 데 사 용 했 을 뿐 입 니 다~
1.우선 이것 은 GridView 로 이 루어 진 것 입 니 다.
xml 레이아웃 은 GridView 하나 입 니 다.

 <GridView
  android:id="@+id/gridView"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:columnWidth="90dp"
  android:gravity="center"
  android:horizontalSpacing="4dp"
  android:numColumns="3"
  android:scrollbars="none"
  android:stretchMode="columnWidth"
  android:verticalSpacing="4dp" />
2.다음은 자바 코드

 //    ,ImageItem          Bean
 private ArrayList<ImageItem> images;
 //adapter   ,                ,    ,  
 private MultiImageAdapter adapter;
 //          this
 adapter = new MultiImageAdapter(this);
 gridView.setAdapter(adapter);

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (data != null && requestCode == 3) {
   //         ,    addAll(),         
   if(images == null){
    images = (ArrayList<ImageItem>)
      data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);
   }else{
    images.addAll((ArrayList<ImageItem>)
      data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS));
   }
   //        images   
   adapter = new MultiImageAdapter(this,images);
   gridView.setAdapter(adapter);
  } else {
   Toast.makeText(this, "      ", Toast.LENGTH_SHORT).show();
  }
 }

Ok,자바 코드 도 끝 났 습 니 다.여기까지 복잡 한 것 은 없 겠 죠?버튼 추가 와 삭제 버튼 처리 가 모두 Adapter 안에 있 습 니 다.다음은 핵심 Adapter 를 말씀 드 리 겠 습 니 다.
3.핵심 어댑터
xml 먼저 볼 게 요.

 <?xml version="1.0" encoding="utf-8"?>
 <com.anfq.mylibrary.view.SquareLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:background="#ffffff"
  android:layout_height="match_parent">
  <RelativeLayout
   android:layout_width="match_parent"
   android:layout_height="wrap_content">
   <ImageView
    android:id="@+id/ivIcon"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimaryDark"
    android:scaleType="fitXY" />
   <ImageButton
    android:id="@+id/ibDelete"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:background="@null"
    android:padding="10dp"
    android:src="@drawable/del" />
  </RelativeLayout>
  <ImageButton
   android:id="@+id/ibAdd"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:layout_centerInParent="true"
   android:background="#eeeeee"
   android:src="@drawable/add"
   android:visibility="gone" />
 </com.anfq.mylibrary.view.SquareLayout>
xml 도 복잡 하지 않 습 니 다.가장 바깥쪽 에 있 는 SquareLayout 는 GridView 에 표 시 된 Item 을 정사각형 으로 처리 합 니 다.RelativeLayout 에 ImageView 가 있 습 니 다.이것 은 그림 을 보 여 주 는 것 입 니 다.ImageButton 은 삭제 버튼 입 니 다.그리고 밖 에 ImageButton 은 추가 단추 입 니 다.숨겨 진 속성 android:visibility="gone"을 설정 하 였 습 니 다.필요 할 때 만 추가 단 추 를 소환 합 니 다.9 개의 그림 을 추가 할 때 추가 단 추 를 추가 하지 않 았 습 니 다.
Square Layout 코드 도 꽂 아 주세요.

 public class SquareLayout extends RelativeLayout {
  public SquareLayout(Context context, AttributeSet attrs, int defStyle) {
   super(context, attrs, defStyle);
  }
  public SquareLayout(Context context, AttributeSet attrs) {
   super(context, attrs);
  }
  public SquareLayout(Context context) {
   super(context);
  }
  @SuppressWarnings("unused")
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
   setMeasuredDimension(getDefaultSize(0, widthMeasureSpec),
     getDefaultSize(0, heightMeasureSpec));
   int childWidthSize = getMeasuredWidth();
   int childHeightSize = getMeasuredHeight();
   //        
   heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec(
     childWidthSize, MeasureSpec.EXACTLY);
   super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  }
 }
Adapter 가 왔 습 니 다.

 public class MultiImageAdapter extends BaseAdapter {
  private Activity activity;
  private LayoutInflater inflater;
  private ArrayList<ImageItem> mImages;
  //           ,          ,     java     this   
  private boolean is = false;
  ImagePicker imagePicker = ImagePicker.getInstance();
  public MultiImageAdapter(Activity activity, ArrayList<ImageItem> images) {
   this.activity = activity;
   this.inflater = LayoutInflater.from(activity);
   this.mImages = images;
   initImagePicker();//           
  } public MultiImageAdapter(Activity activity) {
   this.activity = activity;
   this.inflater = LayoutInflater.from(activity);
   is = true;//   true        
   initImagePicker();//           
  }
  @Override
  public int getCount() {
   if(!is){
    //         9  size  9,   +1,+1        
    return mImages.size()==9?mImages.size():mImages.size()+1;
   }
   //      1,1        
   return 1;
  }
  @Override
  public Object getItem(int position) {
   return mImages.get(position);
  }
  @Override
  public long getItemId(int position) {
   return position;
  }
  @Override
  public View getView(final int position, View view, final ViewGroup parent) {
   ViewHolder holder = null;
   if (null == view) {
    view = inflater.inflate(R.layout.item_ulti_image, null);
    holder = new ViewHolder();
    holder.ivIcon = (ImageView) view.findViewById(R.id.ivIcon);
    holder.ibAdd = (ImageButton) view.findViewById(R.id.ibAdd);
    holder.ibDelete = (ImageButton) view.findViewById(R.id.ibDelete);
    view.setTag(holder);
   } else {
    holder = (ViewHolder) view.getTag();
   }
   if(!is){
    //          ,    position     size
    if(position == mImages.size()){
     //               ,     9  
     if(mImages.size() != 9){
      //  9         
      holder.ibAdd.setVisibility(View.VISIBLE);
     }else{
      //    
      holder.ibAdd.setVisibility(View.GONE);
     }
    }else{
     //                
     //      ,      ~
     holder.ibAdd.setVisibility(View.GONE);
     //          
     ImageItem item = mImages.get(position);
     Glide.with(activity)
       .load(item.path)
       .into(holder.ivIcon);
    }
    //         
    holder.ibDelete.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
      //    
      mImages.remove(position);
      //  
      notifyDataSetChanged();
     }
    });
   }else{
    //              
    holder.ibAdd.setVisibility(View.VISIBLE);
   }
   //        
   holder.ibAdd.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
     //          
     if(!is){
      //          ,   9-size          
      imagePicker.setSelectLimit(9-mImages.size());//      
     }
     //       
     Intent intent = new Intent(activity, ImageGridActivity.class);
     activity.startActivityForResult(intent, 3);
    }
   });
   return view;
  }
  protected class ViewHolder {
   /** icon */
   protected ImageView ivIcon;
   /**    */
   protected ImageButton ibDelete;
   /**   */
   protected ImageButton ibAdd;
  }
  private void initImagePicker() {
   imagePicker.setImageLoader(new GlideImageLoader()); //       
   imagePicker.setShowCamera(true);//      
   imagePicker.setCrop(true);//    (     )
   imagePicker.setSaveRectangle(true);//         
   imagePicker.setSelectLimit(9);//      
   imagePicker.setStyle(CropImageView.Style.CIRCLE);//      
   imagePicker.setFocusWidth(100);//      。    (          )
   imagePicker.setFocusHeight(100);//      。    (          )
   imagePicker.setOutPutX(1000);//       。    
   imagePicker.setOutPutY(1000);//       。    
  }
 }
결론:사실 원 리 는 데이터 의 size+1 을 추가 버튼 으로 배치 한 다음 에 9 장의 그림 이 있 으 면 추가 단 추 를 표시 하지 않 고 size 도+1 하지 않 는 다 고 판단 하 는 것 입 니 다.이렇게 해서 추가 단 추 를 가 진 GridView 를 사용 하면 됩 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기