位置: 编程技术 - 正文

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

  • 建筑垃圾清运税率多少
  • 税收 特征
  • 技术入股亏损如何清算
  • 利润表中的其他综合收益
  • 分公司转独立公司
  • 贷款逾期的本金怎么计算
  • 车辆保险费发票的会计分录
  • 内部损益表
  • 所得税汇算清缴时间期限
  • 工会费用是什么意思
  • 钱汇错需要退回应该怎么做分录?
  • 营改增后向境外提供有偿服务是否需要缴纳增值税?
  • 增值税专票5%税率
  • 企业进口应税物资在进口环节应交的消费税,应计入
  • 企业税审要钱吗
  • 本月有收入免增值税吗
  • 园林绿化苗木增值税抵扣税率是多少?
  • 小规模纳税人减免增值税会计处理
  • 广告支持政策
  • 有限责任公司自然人独资可以增加股东吗
  • 公司租土地建厂房应该怎么做账呢?
  • 失控发票补完税还追究吗
  • 公司对项目的资金支持
  • 主板外部接口是用来连接
  • 银行承兑汇票贴现率是多少
  • 红字专用发票信息表
  • scanserver.exe - scanserver是什么进程 有什么用
  • 机票电子普票不可以报销么
  • php访问统计
  • 如何利用命令符复制文件
  • 增值税专用发票查询系统官方网站
  • yolo 源码
  • 微信php开发教程
  • Laravel中七个非常有用但很少人知道的Carbon方法
  • 有关预收账款的会计科目
  • 借款是经营性负债吗
  • 所得税分配表分录怎么写
  • 利润表本月数可以不填吗
  • php -r
  • vue3项目搭建
  • php数组排列组合
  • tokenall
  • css选择器nth
  • gpt最大
  • 建筑业发票范围
  • 行政单位核销其他应付款分录
  • 深入理解linux内核
  • 厂家给的返点怎么下往来账
  • 原材料账户该如何做账
  • 预计净残值的计算公式excel
  • 残保金账务处理会计科目
  • 费用少计提了怎么办
  • 出售资产时递延所得税转回是全部收入吗
  • 购买产品样品计入什么科目
  • 公众号注册验证退款
  • 因质量原因无法退货
  • 酒店支付清洗费属于什么会计科目
  • 期末结账后没有余额的科目
  • 金蝶当月没有账如何结转到下月
  • 在MySQL中使用GTIDs复制协议和中断协议的教程
  • sql server 更改字段数据类型
  • 关于月亮的诗句
  • CentOS上查看系统信息以及配置防火墙的方法
  • Fedora Core 4.0 安装图解
  • freebsd中文手册
  • win10正版系统禁止设置密码
  • windows7如何启动记事本
  • win10系统网络连接配置异常
  • python matplotlab
  • Node.js中的事件循环是什么
  • 防止sql注入php
  • shell 批量改名
  • JavaScript入门教程
  • 扇形的菜
  • python字号
  • 变更税务局三方协议
  • 1.6排量算大吗
  • 改税务报表会有限风险吗
  • 数字经济与实体经济融合发展的理论探索
  • 撤销存款证明需要什么手续
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设