仿朋友圈图片显示

很多项目都会有一个功能,就是仿朋友圈一样的动态显示,但这个里面有个问题就是图片的摆放是怎样的呢?用recycleView ,用GrideView?在实际过程中,根据不同项目要求不一样的,以上两种有些时候是不太方便做好图片摆放的,因此需要自定义一个,下面就来看看我的SuperGridLayout是如何处理不同张数图片,然后不同显示的吧。

首先是模拟数据,给列表添加的数据,一个HashMap,piece显示的是textview,picUrls是一个集合,存放图片地址的集合。我这里放的为aaaaaaaa,因为我后面用Glide加载图片有error方法,加载失败显示自定义的一个图片,仅仅只是给看个效果展示的。

privatevoidinitDatas() {

for(inti =0; i <6; i++) {

HashMap hashMap =newHashMap<>();

hashMap.put("piece","共"+ (i +1) +"张");

List list =newArrayList<>();

for(intj =0; j <= i; j++) {

list.add("aaaaaaaa"+ i);

}

hashMap.put("picUrls", list);

listDatas.add(hashMap);

}

testAdapter.setDatas(listDatas);

testAdapter.notifyDataSetChanged();

}

[java]view plaincopy

privatevoidinitView() {

mlistview = (ListView) findViewById(R.id.mlistview);

testAdapter =newTestAdapter(MainActivity.this);

testAdapter.setDatas(newArrayList>());

mlistview.setAdapter(testAdapter);

}

跟普通listview添加adapter一样的写法,没任何特别。

接下来就开始看自定义的SuperGridLayout。其实就是计算好尺寸,然后对每一张图片设置好尺寸,然后由于我的SuperGridLayout是继承RelativeLayout,也就是继承ViewGoup了,因此通过addView()方法给它添加自己的child,每一个child就是new ImageView()得来。child的位置也就是通过LayoutParams来设置margin值,主要就是top和left两个方位

LayoutParams params1 =newLayoutParams((int) unitWidth *3/2-2* px, (int) (unitWidth *3/2));

params1.topMargin =0;

params1.leftMargin =0;

ImageView imageView1 =newImageView(getContext());

imageView1.setLayoutParams(params1);

imgs.add(imageView1);

imageView1.setScaleType(ImageView.ScaleType.CENTER_CROP);

Glide.with(context)

.load(data.get(0))

/*.placeholder(R.drawable.gridview_addpic)*/

.crossFade()

.diskCacheStrategy(DiskCacheStrategy.ALL)// 设置本地缓存,缓存源文件和目标图像

.error(R.mipmap.ic_launcher)

.placeholder(R.mipmap.ic_launcher)

.into(imageView1);

imageView1.setOnClickListener(newView.OnClickListener() {

@Override

publicvoidonClick(View v) {

if(onItemClickListener !=null) {

onItemClickListener.onItemClick(data,0);

}

}

});

LayoutParams params2 =newLayoutParams((int) unitWidth *3/2-2* px, (int) (unitWidth *3/2));

params2.topMargin =0;

params2.leftMargin = (int) unitWidth *3/2;

ImageView imageView2 =newImageView(getContext());

imageView2.setLayoutParams(params2);

imgs.add(imageView2);

imageView2.setScaleType(ImageView.ScaleType.CENTER_CROP);

Glide.with(context)

.load(data.get(1))

/*.placeholder(R.drawable.gridview_addpic)*/

.crossFade()

.diskCacheStrategy(DiskCacheStrategy.ALL)// 设置本地缓存,缓存源文件和目标图像

.error(R.mipmap.ic_launcher)

.placeholder(R.mipmap.ic_launcher)

.into(imageView2);

imageView2.setOnClickListener(newView.OnClickListener() {

@Override

publicvoidonClick(View v) {

if(onItemClickListener !=null) {

onItemClickListener.onItemClick(data,1);

}

}

});

LayoutParams params3 =newLayoutParams((int) unitWidth *3/2-2* px, (int) (unitWidth *3/2));

params3.topMargin = (int) unitWidth *3/2+2* px;

params3.leftMargin =0;

ImageView imageView3 =newImageView(getContext());

imageView3.setLayoutParams(params3);

imgs.add(imageView3);

imageView3.setScaleType(ImageView.ScaleType.CENTER_CROP);

Glide.with(context)

.load(data.get(2))

/*.placeholder(R.drawable.gridview_addpic)*/

.crossFade()

.diskCacheStrategy(DiskCacheStrategy.ALL)// 设置本地缓存,缓存源文件和目标图像

.error(R.mipmap.ic_launcher)

.placeholder(R.mipmap.ic_launcher)

.into(imageView3);

imageView3.setOnClickListener(newView.OnClickListener() {

@Override

publicvoidonClick(View v) {

if(onItemClickListener !=null) {

onItemClickListener.onItemClick(data,2);

}

}

});

下面是一个接口回调,处理点击事件,点击时候返回listview的item对应的imags,是个集合,另外position是你点击images里面的第几张

privateOnItemClickListener onItemClickListener;

publicvoidsetOnItemClickListener(OnItemClickListener onItemClickListener) {

this.onItemClickListener = onItemClickListener;

}

/**

* 定义接口

*/

publicinterfaceOnItemClickListener {

voidonItemClick(ArrayList images,intposition);

}

最后就来看一下布局,布局就和普通的RelativeLayout一样,

android:id="@+id/superlayout"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginLeft="10dp"

android:layout_marginRight="10dp"

android:layout_marginTop="10dp"

android:background="#ffffff"

android:visibility="visible"/>

最后看看效果吧,哈哈,

下面是完整demo地址,还不太明白可以下载看看,

http://download.csdn.NET/detail/greatdaocaoren/9916687


csdn项目地址:http://blog.csdn.net/greatdaocaoren/article/details/76476601

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,271评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,725评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,252评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,634评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,549评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,985评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,471评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,128评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,257评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,233评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,235评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,940评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,528评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,623评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,858评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,245评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,790评论 2 339

推荐阅读更多精彩内容