Android 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 를 사용 하면 됩 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.