位置: 编程技术 - 正文

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

  • 税务ukey电子发票二维码用什么扫码
  • 价税合计金额怎么算出税额
  • 纳税调整项目包括哪些?请简单列举
  • 税负转嫁的概念是什么
  • 设立登记核准通知书未签名不能办理其他业务
  • 金税四期接入银行
  • 出差的餐饮发票的税率是多少
  • 增值发票每月上报是怎么个程序吗
  • 固定资产成本包括包装费吗
  • 丢失发票罚款如何入账
  • 制造费用可以抵进项税吗
  • 增值税普票跨月怎么冲红
  • 收据注明实际到账时间
  • 不动产权证拆迁的话有什么作用
  • 专票的税金
  • 搅拌站是自用的账务如何做分录?
  • 报销发票只准报一部分怎么做账?
  • 境外工资薪金
  • 折价收购股权会计分录
  • 出口业务具体流程图
  • 办税员身份怎么办理
  • 2016年的发票可以用到什么时候
  • 网上申报时纳税人怎么填
  • 个体工商户有两个经营者
  • 加速折旧法是什么方法
  • 股东借款作为资本金投入
  • 2018年年终奖个税计算方法
  • 成本法核算长期股权投资初始投资成本
  • 企业所得税年报和增值税收入不一致
  • 购销合同印花税税率
  • 应收票据贴现的会计分录
  • 高价转让股份
  • 建筑工地仓库管理流程
  • 免征税收入和不征税收入的区别
  • 季节性停工是什么
  • 商场充值卡发票在哪开
  • 上一年度的费用能入今年账吗
  • 企业缴纳职工社保政策
  • vue引入高德地图绘制多边形,编辑多边形
  • 报销的费用计入什么科目
  • ajax调用php接口
  • filezilla使用手册
  • 账载折旧金额填哪个数
  • 哪些费用计入管理费用中
  • 财政零余额账户是什么
  • 单位有残疾人能享受
  • 给股东分配股利
  • 进项税额年末账务处理
  • 住宿费发票可以开专票吗
  • 普通支票和现金支票区别
  • mysql临时表什么时候销毁
  • 有没有网上学电脑的
  • 购买商品或服务的人称为
  • 内账的账务处理
  • 契税是指什么?
  • 货物抵货款的账务处理
  • 将固定资产转为投资性房地产账务处理
  • 委托加工业务的财务职责
  • 内部转账单怎么填制
  • 办公室租金发票可以扺增值税吗
  • 记账凭证的项目有哪些
  • 集资建房有维修基金吗
  • 增值税年末一定要结转吗
  • mysql 5.7.33安装
  • mysql5.7.17 zip 解压安装详细过程
  • freebsd版本选择
  • centos基本环境
  • spybuddy.exe - spybuddy是什么进程
  • win8 Could not load type System.ServiceModel.Activation.HttpModule 错误解决方案
  • win10系统声音忽大忽小
  • php redis incr
  • dns设置为网关会出现什么问题了
  • unity操作教程
  • bgm背景
  • javascript常用的数据类型有哪些
  • 电子税务局无法显示抵扣发票
  • 电脑上怎么登录个人网络
  • 世界银行各国经济gdp动态
  • 香港买iphone要交多少税
  • 国税工作人员工资标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设