位置: 编程技术 - 正文

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图片全屏显示)

  • 财税201920号文件解读
  • 产权式酒店规定
  • 我国流转税的税种有哪些
  • 分公司需要独立法人吗
  • 以转账方式收到货款会计分录
  • 资金账簿印花税最新政策2022年
  • 公司支付保险公司保费怎么做账
  • 常见的会计凭证有哪些
  • 国库存款利息收入计入哪个预算收入科目
  • 进口增值税已抵扣想出口
  • 期末数未分配利润为负数的会计分录怎么处理?
  • 外单位的人能否作为本单位的费用报销人?
  • 小规模纳税人增值税怎么算
  • 增值税纳税申报表电子版在哪下载
  • 汇兑损益减少怎么记账
  • 对子公司投资应采取的核算方法
  • 委托个人加工应税消费品纳税地点
  • 公司地址变更代办需要多少钱
  • 对赌协议的账务处理流程
  • 递延资产摊销计算公式
  • 购买的承兑怎么下账
  • bios设置密码有什么用
  • 企业间借款的增值税计算
  • 减税降费是针对个人还是企业
  • 建筑行业怎么做职业生涯规划
  • 二手房过户提供发票好还是不提供
  • 一只猫在花园里英语
  • PHP:mcrypt_generic_end()的用法_Mcrypt函数
  • 礼的部首是什么部
  • sybyl安装教程
  • 难以置信含义
  • 销售费用属于损益类科目的收入还是费用
  • HTML+CSS+JS+Jquery+练手项目+...合集(前端学习必备,持续更新中...)
  • cnpm安装成功为什么用不了
  • 大数据找工作好找吗
  • php忘记密码
  • 宝塔面板要安装什么环境
  • 事业单位结余资金管理办法
  • 小规模纳税人抵税是普票还是专票
  • 普通发票作废要做账吗
  • 住宿费记入管理费用还是营业费
  • 促销服务费分录
  • 公司做的样品展示怎么入账
  • 电费已付,没有收到发票
  • 营业收入的相关认定
  • 哪些收入需缴纳增值税
  • 土地增值税扣除项目税金包括哪些
  • 本年度的进项可以结转到下一年度吗
  • 珠宝可以开票抵扣吗
  • 定期定额个体经营所得税申报错了怎么办
  • 确认营业收入的时间是什么简答题
  • 处理废旧材料会计分录
  • 超市出租摊位交什么税
  • 投资性房地产转为非投资性房地产
  • 无偿划转资产需要挂其他应收款吗
  • 卸车费属于什么费用类别
  • 设备的折旧费怎么算
  • 建账的大体流程有哪些
  • 管理费用标准制定
  • cmd提示符基础知识
  • win10正版系统禁止设置密码
  • svchosl.exe - svchosl是什么进程 有什么作用
  • linux tcptraceroute
  • win10无法打开wifi列表
  • 批处理自动关机命令
  • dos rd命令
  • 10分钟掌握心理学
  • Node.js中的事件循环是什么意思
  • unity签名
  • java中的锁机制
  • 清除cookie是什么意思
  • 浅谈如何培养孩子的注意力
  • jquery one()
  • 地铁酷跑瞬间移动
  • 全国企业信用信息系统网官网
  • 独资企业变更法人
  • 税务局赵昭
  • 广东省地方税务局发票查询
  • 2022年国家标准公文格式
  • 银行宣传岗位职责怎么写
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设