位置: 编程技术 - 正文

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

  • 出口退税无纸化备案怎么弄
  • 商品流通企业印花税购销合同计税依据
  • 什么是税务学
  • 外币报表折算差额是一种未实现的汇兑损益
  • 季度申报后还要年度申报吗
  • 残保金什么样的企业要交
  • 消防检测需要资质吗?
  • 境外机构在境内发行的人民币债券
  • 罚没收入属于
  • 营改增结束了吗
  • 交易性金融资产借贷方向
  • 不得抵扣的会计分录
  • 以前年度做的预算怎么查
  • 员工罚款如何入账
  • 年底结账会计分录一定要做吗
  • 收到差额纳税的发票进项税能抵扣吗
  • 电信宽带费发票专票
  • 企事业承包承租方缴纳的管理费税费
  • 企业利润表中营业收入在资产负债表中有勾千盾关系吗
  • 出口退税的计算题
  • 策划公司费用怎么算
  • w10系统怎么连接
  • 存货跌价准备是备抵科目吗
  • 建筑业增值税会计核算是哪门课的内容
  • 收到母公司的投资款
  • 非工资收入个人所得税税率
  • php实用的案例
  • 哪些费用需要计提,哪些不需要
  • 未确认融资费用账务处理
  • php获取post参数
  • electron-vue官网
  • php文件上传后只显示了路径怎么办啊
  • sessionn
  • 人工智能机器人的好处
  • 购进原材料款项未付应编制什么凭证
  • 形成固定资产的主要手段是
  • sql serverjdbc
  • 固定资产的弃置费用
  • 更改增值税申报表退税在哪里退钱
  • 景点门票做什么科目
  • 疫情期间提涨薪合适吗
  • 小规模结转成本怎么计算
  • 纳税申报是根据什么填写的
  • 食堂菜金属于什么费用
  • 税种的分类方法有哪些
  • 三证合一是哪三证
  • 小规模纳税人所得税优惠政策2023
  • 红字冲销发票的作用
  • 主营业务利润率反映了企业的什么能力
  • sqlserver获取当天零点时间
  • 数据库日期要加引号吗
  • mysql5.6下载
  • CentOS7 64位安装mysql图文教程
  • Mysql 5.7.17 winx64在win7上的安装教程
  • 黑苹果驱动说明
  • centos怎么查看服务器配置
  • macbook key
  • linux运维常用命令汇总
  • hpm是什么格式的文件
  • win10 20h2 v2
  • win7系统开机出现英文字母
  • linux系统命令包含在哪个目录中
  • shutdown命令不能运行
  • python让用户选择
  • 攻击判定是什么意思
  • 用vue写登录页面
  • jquery元素选择器有哪些
  • jquery替换div内容
  • jquery设置图片路径
  • python 获取uuid
  • 页面跳转后js还会执行吗
  • java图像对比
  • 江苏小孩医保网上缴费
  • 江苏省发票真伪查询网站
  • 自贡市税务局稽查局领导
  • 地税局是政府部门吗
  • 四川灵活就业医保每月返多少钱
  • 广西税务局发票查验平台
  • 房屋出租到哪里挂出去
  • 车船税与船舶吨税法律制度ppt
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设