![【移动应用开发技术】Android中GridView仿微信添加多图效果怎么实现_第1页](http://file4.renrendoc.com/view/f508369b6b87f05f746a57791e036e35/f508369b6b87f05f746a57791e036e351.gif)
![【移动应用开发技术】Android中GridView仿微信添加多图效果怎么实现_第2页](http://file4.renrendoc.com/view/f508369b6b87f05f746a57791e036e35/f508369b6b87f05f746a57791e036e352.gif)
![【移动应用开发技术】Android中GridView仿微信添加多图效果怎么实现_第3页](http://file4.renrendoc.com/view/f508369b6b87f05f746a57791e036e35/f508369b6b87f05f746a57791e036e353.gif)
![【移动应用开发技术】Android中GridView仿微信添加多图效果怎么实现_第4页](http://file4.renrendoc.com/view/f508369b6b87f05f746a57791e036e35/f508369b6b87f05f746a57791e036e354.gif)
![【移动应用开发技术】Android中GridView仿微信添加多图效果怎么实现_第5页](http://file4.renrendoc.com/view/f508369b6b87f05f746a57791e036e35/f508369b6b87f05f746a57791e036e355.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中GridView仿微信添加多图效果怎么实现
这篇文章主要介绍Android中GridView仿微信添加多图效果怎么实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图在项目中这种添加⑨图的效果应该是非常常见的,后面有个添加的按钮应该怎么实现,这也许让一部分小白抓狂了吧~来吧,淡漠带你飞,走起~~啦啦啦起飞前先说下,本篇只是讲解九宫格添加图片的效果,至于选择图片的效果是别人写的库,我只是接过来做选择图片用的~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.接下来看看java代码
//图片数据,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,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){
//这里判断数据如果有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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度建筑工程质量保修服务合同
- 2025年度专业小时工家政服务合同规范文本
- 2025年度跨境电商共同担保合同范本
- 漯河2024年河南漯河市民政局事业单位引进高层次人才1人笔试历年参考题库附带答案详解
- 昆明云南昆明市五华区人民政府护国街道办事处招聘6名公益性岗位人员笔试历年参考题库附带答案详解
- 2025年中国双格电热锅市场调查研究报告
- 2025年酸性蓝染料项目可行性研究报告
- 2025至2031年中国锦棉闪光锻行业投资前景及策略咨询研究报告
- 2025年美容按摩床项目可行性研究报告
- 2025年盐渍半干海参项目可行性研究报告
- (2024年)房地产销售人员心态培训
- 康复科院感年度工作计划
- T-BJCC 1003-2024 首店、首发活动、首发中心界定标准
- 《海洋自然保护区》课件
- 2024年云南机场集团飞机维修服务分公司招聘笔试参考题库含答案解析
- 外科手术及护理常规
- 苏少版小学一年级下册综合实践活动单元备课
- 学校开学教师安全培训
- 出口潜力分析报告
- 晋升的述职报告
- 微信视频号运营技巧攻略详解全套
评论
0/150
提交评论