




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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年-江苏建筑安全员C证考试(专职安全员)题库附答案
- 中华护理学会老年人误吸的预防团体标准解读
- 用章审批流程
- 高速铁路桥隧养护维修 课件 2 桥隧养护维修工作的基本方法和基本内容
- DB37T 3651-2019 汽车加油站安全生产风险管控和隐患排查治理体系建设实施指南
- DB32-T 4340-2022 沥青红外光谱法相似度识别与SBS含量试验检测规程
- 《安全生产治本攻坚三年行动方案(2024-2026年)》子方案合集
- 职业道德试题及答案
- 《大模型原理与技术》全套教学课件
- 湖北省十一校2025届高三第一次联考 英语试卷(含答案)
- 生产异常处理流程
- 工程测量课件:GNSS测量原理与方法
评论
0/150
提交评论