自定义相册、九宫格显示图片

一 自定义相册

结合Glide图片库,加载显示本地图片,并可以实现单选,多选,预览功能。特点

  •  加载最近新增图片,GridView显示
  • 分文件夹选择图片
  • 支持单选,多选(最大9张)
  • 支持大图预览

以库的形式保存,实际项目中导入PhotoSelector库使用。

二 九宫格显示图片

  • 九宫格形式显示图片
  • 点击预览大图

GirdView 设置

 1     <com.zc.baselib.view.NoScrollGridView
 2                 android:id="@+id/gv_photo"
 3                 android:layout_width="match_parent"
 4                 android:layout_height="wrap_content"
 5                 android:layout_gravity="center"
 6                 android:layout_marginTop="@dimen/margin_min"
 7                 android:background="@null"
 8                 android:clickable="false"
 9                 android:listSelector="@android:color/transparent"
10                 android:verticalSpacing="@dimen/margin_min_a"
11                 android:numColumns="3"/>

自定义PhotoGridAdapter数据源

 1 public class PhotoGridAdapter extends CommonListAdapter<ImageModel> {
 2 
 3     private int itemWidth;
 4     private int gridViewWidth;
 5     private int horizentalNum = 3;
 6     private AbsListView.LayoutParams itemLayoutParams;
 7 
 8     public PhotoGridAdapter(Context context, List<ImageModel> mDatas) {
 9         super(context, mDatas);
10     }
11 
12     public PhotoGridAdapter(Context context, List<ImageModel> mDatas, int width) {
13         super(context, mDatas);
14         this.gridViewWidth = width;
15         setItemWidth();
16     }
17 
18     /**
19      * 设置每一个Item的宽高 = (GirdView宽度 - 行间距) / 每行显示个数
20      */
21     public void setItemWidth() {
22         int horizentalSpace = mContext.getResources().getDimensionPixelSize(com.zc.photoselector.R.dimen.gridview_item_horizontalSpacing_4);
23         this.itemWidth = (gridViewWidth - (horizentalSpace * (horizentalNum - 1))) / horizentalNum;
24 //        this.itemWidth = viewWidth / horizentalNum;
25         this.itemLayoutParams = new AbsListView.LayoutParams(itemWidth, itemWidth);
26     }
27 
28 
29     @Override
30     public View getView(final int position, View view, ViewGroup viewGroup) {
31         if (view == null) {
32             view = View.inflate(mContext, R.layout.item_photo_grid, null);
33             view.setLayoutParams(itemLayoutParams);
34         }
35 
36         ImageView img_photo = ViewHolder.get(view, R.id.img_photo);
37         ImageModel imageModel = mDatas.get(position);
38         Glide.with(mContext).load(imageModel.getOriginalPath())
39                 .dontAnimate()
40                 .centerCrop()
41                 .override(300, 300)
42                 .placeholder(com.zc.photoselector.R.drawable.ic_loading_white)
43                 .error(com.zc.photoselector.R.drawable.mis_default_error)
44                 .into(img_photo);
45 
46         //查看大图
47         img_photo.setOnClickListener(new View.OnClickListener() {
48             @Override
49             public void onClick(View view) {
50                 Intent intent = new Intent(mContext, PhotoPreviewActivity.class);
51                 intent.putExtra("index", position);
52                 intent.putExtra("images", (ArrayList) mDatas);
53                 mContext.startActivity(intent);
54             }
55         });
56         return view;
57     }
58 
59 }

item_photo_grid 布局文件

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:layout_width="match_parent"
 3     android:layout_height="match_parent">
 4 
 5     <ImageView
 6         android:id="@+id/img_photo"
 7         android:layout_width="fill_parent"
 8         android:layout_height="fill_parent"
 9         android:layout_gravity="center"
10         android:scaleType="centerCrop" />
11 
12 </RelativeLayout>

activity引用

1  gv_photo = (NoScrollGridView) findViewById(R.id.gv_photo);
2         list = new ArrayList<>();
3         gv_photo.post(new Runnable() {
4             @Override
5             public void run() {
6                 adapter = new PhotoGridAdapter(ServiceActivity.this, list, gv_photo.getWidth());
7                 gv_photo.setAdapter(adapter);
8             }
9         });

 

转载于:https://www.cnblogs.com/suiyilaile/p/9159451.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353531.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计一代码,逆置带头结点的动态单链表L

有两种方法&#xff1a; 一是&#xff1a;用头插法建立单链表&#xff0c;自然而然就实现了逆置的动态链表。 代码&#xff1a; #include<stdio.h> #include<malloc.h> typedef int datatype; typedef struct node {datatype data;struct node * next; }linklist…

dll生成lib

来自http://suddymail.org/show-160-1.html没有尝试过&#xff0c;仅供参考。其他链接&#xff1a;http://hi.baidu.com/songxiuying/item/af67755203840f948d12ed6d为无LIB的DLL制作LIB函数符号输入库 本文介绍了在VC中针对无LIB时的DLL隐式链接,制作可供VC使用的LIB函数符号…

maven使用junit3_JUnit,Logback,带有Maven 3的Maven

maven使用junit3在本系列中&#xff0c;我们已经学习了建立基本的Spring MVC应用程序并学习了如何在Spring MVC中处理表单 。 现在该讨论更多涉及的话题了。 但是&#xff0c;在我们涉足更深的领域之前&#xff0c;让我们先进行一些基础设置。 单元测试 我不是TDD传播者。 我在…

LeetCode(90):子集 II

Medium&#xff01; 题目描述&#xff1a; 给定一个可能包含重复元素的整数数组 nums&#xff0c;返回该数组所有可能的子集&#xff08;幂集&#xff09;。 说明&#xff1a;解集不能包含重复的子集。 示例: 输入: [1,2,2] 输出: [[2],[1],[1,2,2],[2,2],[1,2],[] ] 解题思路&…

MFC程序在其他机器运行

为了保证MFC程序能够在没有安装VS的机器上运行&#xff0c;可以采用如下方法。1. 单个的小程序&#xff0c;可以静态编译MFC&#xff0c;但不适用于有很多dll的工程。2. 拷贝VS安装目录Microsoft Visual Studio 11.0\VC\redist\x86\Microsoft.VC110.MFC下的4个文件和Microsoft …

ACM搜索题目总结

ACM搜索题目总结 格式说明&#xff1a;题目名后面列出个人此题的大致难度&#xff08;对菜鸟而言&#xff09; POJ 1069 -The Bermuda Triangle(难) http://acm.pku.edu.cn/JudgeOnline/problem?id1069 题意&#xff1a;用给定三角型填充六边形 解法&#xff1a;此题的思想上精…

JPA中按身份引用

在上一篇文章中 &#xff0c;我提到我选择通过其主键而不是类型来引用其他聚合。 在处理大型或复杂域模型时&#xff0c;我通常使用这种方法&#xff08;也称为断开域模型&#xff09;。 在这篇文章中&#xff0c;让我尝试进一步解释如何在JPA中完成它。 请注意&#xff0c;生成…

在idea下开发出现404错误

用idea开发时&#xff0c;我们一般要设置project strucure里的Modules-Sources,里面对应的有Sources,tests,Resources,Test Resources&#xff0c; Excluded。 同时也可以在maven的pom里面build标签里设置。 <resource><directory>src/main/webapp</directory&g…

MFC利用控制台输出调试信息的方法

VS2010中只要输入以下信息即可&#xff1a;editbin /SUBSYSTEM:CONSOLE $(OUTDIR)$(TargetName).exeVC6.0稍微复杂&#xff1a;打开菜单“Project”-“Setting”&#xff08;或者Alt-F7&#xff09;&#xff0c;打开选项卡“Post-builder step”&#xff08;Post-build步骤&…

一念成佛,一念成魔

一念成佛&#xff0c;一念成魔 前几天&#xff0c;因我与寝友的一次错误导致电脑系统崩溃&#xff0c;连开机都开不了了。可我发现我并不是很生气&#xff0c;只是用玩笑话调侃了他一下。后来想想&#xff0c;要是放在以前&#xff0c;我一定会大发脾气&#xff0c;几天都不去理…

Jquery操作基本筛选过滤器

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>层级选择器</title><link rel"stylesheet" href"../../css/style.css" type"text/css"/><script type"text/javascript…

nodejs微信小程序+python+PHP计算机网络在线考试系统-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

Visual C++利用互斥量同步线程实现文件读取进度条

忘了原文的位置了。 一、前言 文件读取进度条的实现可以有很多种方法,常用的是在读取文件的过程中隔一定时间向对话框发送消息以控制进度条的位置,但是这种方法很难确定隔多少时问发送一个消息,因为文件的大小是不确定的,时间间隔长了可能文件已经读取完了还没有发送消…

组件模块化使用

// 使用$attr可以直接在父元素上拿数据让子元素使用或者是孙元素使用 <template><div>props:{{name}},{{age}} 或者 {{$props[name]}},{{$props[age]}} <br>attrs: {{$attrs[gender]}} 在$attrs里面只会有props没有注册的属性</div> </template>…

jboss与nginx_JBoss BRMS与JasperReports进行报告

jboss与nginx介绍 Jasperreports是可免费下载的库&#xff0c;可用于为Java EE应用程序生成丰富的报告。 本指南还提供了使用Jasper iReport设计器生成报告模板的步骤。 软件需求 JBoss BRMS 5.3&#xff08;从客户门户网站http://access.redhat.com &#xff09; JasperRep…

VS2010发布、打包安装程序超全超详细

找不到原文链接 1、 在vs2010 选择“新建项目”“其他项目类型”“ Visual StudioInstaller “安装项目”&#xff1a; 命名为&#xff1a;Setup1 。 这是在VS2010中将有三个文件夹&#xff0c; 1.“应用程序文件夹”表示要安装的应用程序需要添加的文件&#xff1b; 2.“…

IntelliJ IDEA2017 激活方法 最新的

今天打开电脑&#xff0c;非常不幸&#xff0c;idea出问题了&#xff01;&#xff01;&#xff01;大部分人以前应该都是用的以下方法&#xff1a;1. 到网站 http://idea.lanyus.com/ 获取注册码2.填入下面的license server:http://intellij.mandroid.cn/   http://idea.imsx…

介绍HawkFX

如前所述&#xff0c; 我开始玩JRubyFX 。 对我来说&#xff0c;学习一些新的最佳方法可以解决用例&#xff0c;因此我开始为Hawkular创建库存浏览器。 为什么选择JRubyFX&#xff1f; 让我们首先从“什么是JRubyFX”开始&#xff1f; JRubyFX是通过JRuby引入Ruby世界的JavaFX…

C++ Unicode和ANSII转换

构造字符串和转换字符串是不一样的&#xff0c;构造字符串时往往是添加标记&#xff0c;这个过程其实是告诉编译器应该怎么在内存中存储&#xff1b;一旦构造好&#xff0c;对于内存中的一块地址&#xff0c;这些标记符就没用了&#xff0c;这个时候就得使用转换函数转换了。对…

创建win32 dll

新建项目->win32项目&#xff08;不是win32控制台&#xff09;->下一步中选择dll&#xff08;如果想生成lib&#xff0c;勾选导出符号&#xff09;。此时编译会生成对应的dll文件&#xff0c;但没有lib&#xff0c;只有有导出符号的时候才会生成lib文件。导出符号可以使用…