位置: 编程技术 - 正文

android GridView实现图库预览图,多选模式下右上角打勾

编辑:rootadmin

推荐整理分享android GridView实现图库预览图,多选模式下右上角打勾,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

转自: GridView实现图库预览图,多选模式下右上角打勾。(4.0图库的预览图多选时,多了个蓝色边框,其实是蓝色背景)

GridView在自己实际开发中也没用到过,就想试着实现下,写个demo供初学者参考,高手略过。

先来个效果图吧:

实现起来不复杂,就2个文件。 首先看看GridView继承关系:

java.lang.Object ↳android.view.View ↳android.view.ViewGroup ↳android.widget.AdapterView<T extends android.widget.Adapter> ↳android.widget.AbsListView ↳android.widget.GridViewandroid GridView实现图库预览图,多选模式下右上角打勾

我们知道ListView有单选模式和多选模式[AbsListView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE/AbsListView.CHOICE_MODE_MULTIPLE_MODAL)]

那么GridView也支持多选模式。

废话不多说,相信你也知道!贴代码吧

主布局文件:main.xml

[html] view plaincopy<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" > <GridView android:id="@&#;id/gridview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:columnWidth="dip" android:gravity="center" android:horizontalSpacing="2dip" android:numColumns="4" android:verticalSpacing="2dip" /> </LinearLayout>

主Activity:HomeActivity

[java] view plaincopypackage com.xyz.gridview; import java.util.HashMap; import java.util.Map; import java.util.Set; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.ActionMode; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView.LayoutParams; import android.widget.AbsListView.MultiChoiceModeListener; import android.widget.BaseAdapter; import android.widget.Checkable; import android.widget.FrameLayout; import android.widget.GridView; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.TextView; public class HomeActivity extends Activity implements MultiChoiceModeListener { private GridView mGridView; private GridAdapter mGridAdapter; private TextView mActionText; private static final int MENU_SELECT_ALL = 0; private static final int MENU_UNSELECT_ALL = MENU_SELECT_ALL &#; 1; private Map<Integer, Boolean> mSelectMap = new HashMap<Integer, Boolean>(); private int[] mImgIds = new int[] { R.drawable.img_1, R.drawable.img_2, R.drawable.img_3, R.drawable.img_4, R.drawable.img_5, R.drawable.img_6, R.drawable.img_7, R.drawable.img_8, R.drawable.img_9, R.drawable.img_1, R.drawable.img_2, R.drawable.img_3, R.drawable.img_4, R.drawable.img_5, R.drawable.img_6, R.drawable.img_7 }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mGridView = (GridView) findViewById(R.id.gridview); mGridView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL); mGridAdapter = new GridAdapter(this); mGridView.setAdapter(mGridAdapter); mGridView.setMultiChoiceModeListener(this); } /** Override MultiChoiceModeListener start **/ @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { // TODO Auto-generated method stub View v = LayoutInflater.from(this).inflate(R.layout.actionbar_layout, null); mActionText = (TextView) v.findViewById(R.id.action_text); mActionText.setText(formatString(mGridView.getCheckedItemCount())); mode.setCustomView(v); getMenuInflater().inflate(R.menu.action_menu, menu); return true; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { // TODO Auto-generated method stub menu.getItem(MENU_SELECT_ALL).setEnabled( mGridView.getCheckedItemCount() != mGridView.getCount()); return true; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case R.id.menu_select: for (int i = 0; i < mGridView.getCount(); i&#;&#;) { mGridView.setItemChecked(i, true); mSelectMap.put(i, true); } break; case R.id.menu_unselect: for (int i = 0; i < mGridView.getCount(); i&#;&#;) { mGridView.setItemChecked(i, false); } mSelectMap.clear(); break; } return true; } @Override public void onDestroyActionMode(ActionMode mode) { // TODO Auto-generated method stub mGridAdapter.notifyDataSetChanged(); } @Override public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { // TODO Auto-generated method stub mActionText.setText(formatString(mGridView.getCheckedItemCount())); mSelectMap.put(position, checked); mode.invalidate(); } /** Override MultiChoiceModeListener end **/ private String formatString(int count) { return String.format(getString(R.string.selection), count); } private class GridAdapter extends BaseAdapter { private Context mContext; public GridAdapter(Context ctx) { mContext = ctx; } @Override public int getCount() { // TODO Auto-generated method stub return mImgIds.length; } @Override public Integer getItem(int position) { // TODO Auto-generated method stub return Integer.valueOf(mImgIds[position]); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub GridItem item; if (convertView == null) { item = new GridItem(mContext); item.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); } else { item = (GridItem) convertView; } item.setImgResId(getItem(position)); item.setChecked(mSelectMap.get(position) == null ? false : mSelectMap.get(position)); return item; } } }

上面用到 GridItem是自己封装的一个类:GridItem.java[java] view plaincopypackage com.xyz.gridview; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.Checkable; import android.widget.ImageView; import android.widget.RelativeLayout; public class GridItem extends RelativeLayout implements Checkable { private Context mContext; private boolean mChecked; private ImageView mImgView = null; private ImageView mSelcetView = null; public GridItem(Context context) { this(context, null, 0); } public GridItem(Context context, AttributeSet attrs) { this(context, attrs, 0); } public GridItem(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub mContext = context; LayoutInflater.from(mContext).inflate(R.layout.grid_item, this); mImgView = (ImageView) findViewById(R.id.img_view); mSelcetView = (ImageView) findViewById(R.id.select); } @Override public void setChecked(boolean checked) { // TODO Auto-generated method stub mChecked = checked; setBackgroundDrawable(checked ? getResources().getDrawable( R.drawable.background) : null); mSelcetView.setVisibility(checked ? View.VISIBLE : View.GONE); } @Override public boolean isChecked() { // TODO Auto-generated method stub return mChecked; } @Override public void toggle() { // TODO Auto-generated method stub setChecked(!mChecked); } public void setImgResId(int resId) { if (mImgView != null) { mImgView.setBackgroundResource(resId); } } } 这个类引用的一个布局:grid_item.xml[html] view plaincopy<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@&#;id/img_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="fitXY" /> <ImageView android:id="@&#;id/select" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:background="@drawable/icon_choice" android:visibility="gone" /> </RelativeLayout> 就这么多啦。左上角的勾,就是控制 ImageView 显示与不显示的问题。

源码路径: ~~完~~

android 图片倾斜倒影 privateBitmapcreateInvertedImage(){Bitmapbitmap=BitmapFactory.decodeResource(getResources(),R.drawable.pic_1);intwidth=bitmap.getWidth();intheight=bitmap.getHeight();Matrixmatrix=newMatrix();//设置

仿淘宝商品详情页面下拉黏滞效果 项目中需要用到淘宝商品详情页面的下拉黏滞效果,刚开始的想法比较复杂,是通过投机取巧的方式来大致实现的,但是效果很不好,勉强可以使用,

Android开源项目PullToRefresh的使用(下拉刷新) 首先下载Android-PullToRefresh-master下载地址

标签: android GridView实现图库预览图,多选模式下右上角打勾

本文链接地址:https://www.jiuchutong.com/biancheng/378129.html 转载请保留说明!

上一篇:Android中EditText常用属性与软键盘控制(android的edittext在哪)

下一篇:android 图片倾斜倒影(android图片全屏显示)

  • 企业卖车交税怎么算的
  • 什么是特别纳税人
  • 企业所得税的成本是含税还是不含税
  • 无票收入是否要交税
  • 借款利息支出全部可以税前扣除吗
  • 机械租赁费怎么算
  • 行政单位资产核算
  • 展会门票费计入什么科目
  • 打印机需要计提折旧吗
  • 退休返聘人员被辞退未提前通知能要求多付一个月工资吗
  • 企业所得税税前扣除异常
  • 装修行业属于什么行业分类
  • 国税网上三方协议流程 个人所得税
  • 所得税退税需要多久
  • 一般纳税人普通发票要交增值税吗
  • 无票收入的账务怎么处理
  • 个体工商户支付宝怎么开票
  • 分公司向总公司转钱可以吗
  • 少交的增值税如何记账
  • 五险会计分录会计处理
  • 安装监控违法吗
  • 旧设备投资的税务处理
  • laravel基础
  • 收到提供劳务的收入
  • 冰川湾国家公园的冰川不止有白色一种
  • 权重函数公式
  • 编译安装和普通安装
  • el-upload上传文件必传校验
  • display version命令
  • 帝国cms怎么用
  • 增值税增量留抵退税政策2019
  • 什么是预付账款的管理重点
  • 所得税季度申报表怎么填
  • 公司承担员工的社保费会计分录
  • 防伪税控开票
  • mysql 子查询
  • mysql有几种
  • 社保工伤退回分录
  • 建筑业开票税点
  • 差额征税可以开专票抵扣吗
  • 什么情况个税可以扣除
  • 税务相关政策的解读
  • 修理费账务处理
  • 金税盘全额抵扣申报表怎么填
  • 收员工伙食费会计分录
  • 会计处理方法是什么意思
  • 毛利率代表什么?如何计算毛利率?
  • 实际收到货款分录
  • 商业保险的养老保险可靠吗
  • 企业对外借款是什么意思
  • 什么是应收账款管理
  • 收入与成本不配合
  • 员工出差的餐费可以抵扣吗
  • 免抵退怎么理解
  • 未开票州
  • 建厂房之前需要什么条件
  • 公司活动费用分录
  • 成本会计核算方法论文怎么写
  • Linux下安装mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz
  • freenas11.2安装教程
  • solaris修改ip地址
  • 安装centos6.6详细步骤
  • Win7打印机驱动备份
  • win10系统打印机脱机状态怎么恢复正常打印
  • win10开机提示xwz
  • system的方法
  • plugin怎么安装
  • shell案例讲解
  • windows批处理命令大全
  • python 进程间通讯
  • unity配置安卓sdk
  • javaweb物流管理系统源码
  • js创建元素
  • Div CSS absolute与relative的区别小结
  • socketio nodejs
  • 批处理程序删除文件夹中临时文件
  • error: Error parsing XML: unbound prefix
  • UIAutomator在AndroidStudio中的使用
  • 税务局冲红发票
  • 多缴税款可以抵顶以后欠费的税款吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设