版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應用開發(fā)技術(shù)】Android中GridView仿微信添加多圖效果怎么實現(xiàn)
這篇文章主要介紹Android中GridView仿微信添加多圖效果怎么實現(xiàn),文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!效果圖在項目中這種添加⑨圖的效果應該是非常常見的,后面有個添加的按鈕應該怎么實現(xiàn),這也許讓一部分小白抓狂了吧~來吧,淡漠帶你飛,走起~~啦啦啦起飛前先說下,本篇只是講解九宮格添加圖片的效果,至于選擇圖片的效果是別人寫的庫,我只是接過來做選擇圖片用的~1.首先這是用GridView實現(xiàn)的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.接下來看看java代碼
//圖片數(shù)據(jù),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)
{
//判斷一下是否有數(shù)據(jù),有的話就addAll(),不會覆蓋已經(jīng)有的圖
if(images
==
null){
images
=
(ArrayList<ImageItem>)
data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);
}else{
images.addAll((ArrayList<ImageItem>)
data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS));
}
//拿到圖片數(shù)據(jù)后把images傳過去
adapter
=
new
MultiImageAdapter(this,images);
gridView.setAdapter(adapter);
}
else
{
Toast.makeText(this,
"沒有選擇圖片",
Toast.LENGTH_SHORT).show();
}
}Ok,Java代碼也講完了,到這里沒有什么復雜的吧,添加按鈕和刪除按鈕的處理都在Adapter里面,下面開始說核心的Adapter3.核心Adapter先看xml吧
<?xml
version="1.0"
encoding="utf-8"?>
<com.anfq.mylibrary.view.SquareLayout
xmlns:android="/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個圖片的時候是沒有添加按鈕的。把SquareLayout的代碼也插上吧~
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){
//這里判斷數(shù)據(jù)如果有9張就size等于9,否則就+1,+1是為按鈕留的位置
return
mImages.size()==9?mImages.size():mImages.size()+1;
}
//沒有數(shù)據(jù)就是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()){
//執(zhí)行到這里就說明是最后一個位置,判斷是否有9張圖
if(mImages.size()
!=
9){
//沒有9張圖就顯示添加按鈕
holder.ibAdd.setVisibility(View.VISIBLE);
}else{
//有就隱藏
holder.ibAdd.setVisibility(View.GONE);
}
}else{
//還不是最后一個位置的時候執(zhí)行這里
//隱藏添加按鈕,要設置圖片嘛~
holder.ibAdd.setVisibility(View.GONE);
//根據(jù)條目位置設置圖片
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){
//到這里表示已經(jīng)選過了,然后用9-size算出還剩幾個圖的位置
imagePicker.setSelectLimit(9-mImages.size());//選中數(shù)量限制
}
//跳轉(zhuǎn)到圖片選擇
Intent
intent
=
new
Intent(activity,
ImageGridActivity.class);
activity.startActivityForResult(intent,
3);
}
});
return
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度民間標準借貸合同金融科技創(chuàng)新與金融服務3篇
- 2025版跨境電商商品購銷合同擔保抵押執(zhí)行書3篇
- 2025版版權(quán)代理居間傭金合同示范文本3篇
- 2024年電動車用鋰電池供貨協(xié)議
- 2024年度大連業(yè)主支付擔保辦理優(yōu)化升級合同3篇
- 二零二五年家庭廚師服務合同范本3篇
- 二零二五年度2025版二婚離婚協(xié)議中的房產(chǎn)分配與子女安置協(xié)議
- 2025年度工藝品購銷合同樣本2篇
- 二零二五年賓館餐廳員工激勵機制承包合同2篇
- 二零二五年度個人向公司提供倉儲物流服務合同樣本2篇
- 醫(yī)療器械監(jiān)督管理條例培訓2024
- 旅游度假村分成協(xié)議
- 醫(yī)療技術(shù)管理總結(jié)
- 艦艇損害管制與艦艇損害管制訓練
- 常見年宵花春節(jié)期間養(yǎng)護攻略
- 安全安全技術(shù)交底模板
- 2021年河南學業(yè)水平考試 pyton操作題代碼以及 Python基礎(chǔ)知識點
- 整本書閱讀《鄉(xiāng)土中國》課件+2024-2025學年統(tǒng)編版高中語文必修上冊
- 夏天奔跑的聲音(2022年浙江杭州中考語文試卷記敘文閱讀題及答案)
- 人力資源許可證制度(服務流程、服務協(xié)議、收費標準、信息發(fā)布審查和投訴處理)
- 延期留用崗位協(xié)議書模板
評論
0/150
提交評論