Gallery

Gallery——Gallery Gallery-Android15代码 立即下载

本文概述:

用gallery是实现图片手动滑动和自动滚动的效果


基本解决方案:重写Gallery,重写里面的方法

1、手动滑动

gallery默认便是可进行手动滑动的,但滑动时会同时滑动多张,重写滑动事件onFling(),保证每次只滑动一张图片

        /**
	 * 一次只滑动一张图片
	 */
	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
		// TODO Auto-generated method stub

		int kEvent;
		if (isScrollingRight(e1, e2)) {
			kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
		} else {
			kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
		}
		return onKeyDown(kEvent, null);
	}
上面有一个isScrollingRight(),只不过是用来判断是向左还是向右滑动:

        /**
	 * 判断手指是否向右滑动
	 */
	 private boolean isScrollingRight(MotionEvent e1, MotionEvent e2) {
		return e2.getX() > e1.getX();
	 }


2、自动滚动

构造一个计时器,隔一段时间便通知gallery该触发滑动事件onKeyDown(int keyCode,KeyEvent event);

        /**
	 * 构造计时器
	 */
	private Timer timer = new Timer();
	private TimerTask task = new TimerTask() {
		@Override
		public void run() {
			// TODO Auto-generated method stub
			handler.sendEmptyMessage(GUIDE_TIMER);
		}
	};
        Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case GUIDE_TIMER:
				onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
				break;
			}
		};
	};
       /**
	 * 开始计时
	 */
	public void startTimer() {
		timer.schedule(task, periodTime, periodTime);

	}
计时器的时间间隔periodTime可由外部传入,启动计时器后,每隔periodTime的时间gallery会自动滑动一张图片


3、图片滑动事件与点击事件的冲突问题

在自定义的gallery中重写onInterceptTouchEvent(MotionEvent ev)方法:

        /**
	 * 解决滑动和点击事件冲突,重写该方法拦截触屏事件,返回false将会上抛该事件到子view上面, 返回true则事件不会上抛,将在
	 * Gallery内部的OnTouchEvent() 接收做处理
	 */
	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {
		// TODO Auto-generated method stub
		boolean b = super.onInterceptTouchEvent(ev);
		if (ev.getAction() == MotionEvent.ACTION_DOWN) {
			e = MotionEvent.obtain(ev);
			super.onTouchEvent(ev);
		} else if (ev.getAction() == MotionEvent.ACTION_MOVE) {
			if (Math.abs(ev.getX() - e.getX()) > 20 || Math.abs(ev.getY() - e.getY()) > 20) {
				b = true;
			}
		}
		return b;
	}
4、禁止手动滑动

gallery默认是可以进行手动滑动的,若只想让图片自动滚动,重写里面的 onTouchEvent(MotionEvent event)事件,将返回值返回false即可:

        /**
	 * 重写touch事件,禁止滑动
	 */
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
		return false;
	}


5、无限循环自动滚动

上面的方法在自动滚动完最后一张图片后,gallery的自动滚动便会停止,若想让gallery滚动完最后一张后出现第一张重新滚动,可重新定义adapter,处理getCount()和getView()方法,将个数设置成Integer.MAX_VALUE,显示时对应将相应的图片展示出来即可:

        @Override
	public int getCount() {
		// TODO Auto-generated method stub
		return Integer.MAX_VALUE;
	}
        @Override
	public View getView(int position, View view, ViewGroup parent) {
		// TODO Auto-generated method stub
		if (view == null) {
			view = LayoutInflater.from(context).inflate(R.layout.gallery_item, null);
		}
		ImageView imageView = (ImageView) view.findViewById(R.id.item_iv);
		imageView.setImageResource(icon[position % icon.length]);
		return view;
	}
同时,为了让用户感觉可以左右无限循环,可将gallery默认选中最大值的中间部分,即使是刚开始也能左右都能滑动:

                int centerNum = Integer.MAX_VALUE / 2;
		centerNum -= centerNum % size;//size图片个数,显示的是第一张图片
		myGallery.setSelection(centerNum);// 设置默认选中
6、左右自动滚动(顺序滚动完最后一张,然后逆序滚动,逆序滚动到第一张,再顺序滚动)

此种实现不需要类似5那样处理adapter,像常规处理即可,处理类似上边的handler回调:

//position当前页,num图片数量
Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case GUIDE_TIMER:
				if (flag) {// 向右
					onScroll(null, null, 1, 0);
					onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
					if (position == num - 2) {//滑动到最后一张
						flag = false;
					}
				} else if (!flag) {// 向左
					onScroll(null, null, -1, 0);
					onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null);
					if (position == 1) {//滑动到第一张
						flag = true;
					}
				}
				break;
			}
		};
	};
当前页的position可由设置监听 OnItemSelectedListener获得


7、自动滚动抖动问题

当gallery放在RelativeLayout中时,在滚动过程中会出现左右抖动,解决方法,将gallery的外面套的父RelativeLayout统统去掉(同级不影响),可选用Framelayout代替。


8、边框模糊问题

xml添加属性 android:fadingEdgeLength=”0dp”


9、设置setSpacing()后自动滚动失效

gallery设置setSpacing()之后会导致onKeyDown()失效,从而不能自动滚动,调用onScroll()方法可解决问题

                                /**
				 * gallery设置setSpacing()后,onKeyDown()会失效,添加onScroll方法可解决,
				 * 后面两个参数分别是自上次调用onScroll方法在X、Y上的距离
				 **/
				onScroll(null, null, 1, 0);
				onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);

10、gallery每个子元素充满整个屏幕

如果显示的内容比较小,gallery会自动在一个屏幕显示好几个子元素,想要每个屏幕只显示一个元素,关键改变item的layout的最外层,使用RelativeLayout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>
<ImageView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />
</RelativeLayout>


11、禁止点击声音

setSoundEffectsEnabled(false);

12、禁止点击震动(触感反馈)

setHapticFeedbackEnabled(false);












Gallery Demo 绝对好用不骗分,实现了画廊的效果,外加底部页码显示,导入不好用的给我留 立即下载

相关推荐

DDR4/LPDDR4与DDR5/LPDDR5的差别

最新的 DDR5 可支持单一芯片容量 64Gbit,最高容量上限可增加到 128GB,较 DDR4 提高了四倍;价格:随着规格提升,DDR5 价格也较 DDR4 高出逾 50%,可能成为业者导入的阻碍。但如前所述,包括 5G、机器学习(ML)等各式进阶应用中,DDR5 的整体效能、规格的提升,对相关业者来说仍具一定优势与吸引力。电源管理 IC(PMIC IC):电源管理芯片内建至 DDR5 内存中,除可提高讯号完整性及噪声辨识能力,还能更具效率与扩展性;DDR5 规格与效能整理。(来源:JEDEC)

flomingo1的专栏 9018

Android组件的使用:Gallery

Android中Gallery(画廊)的使用 1、Gallery 1.1、使用BaseAdapter完成Gallery 思路:通过BaseAdapter类加载一个布局文件信息。 步骤:-->新建一个布局文件gallery_layout.xml,其中只有一个Gallery组件。             -->新建一个布局文件gallery_item_layout.xml,其中只有一个I

zhengweicong2011的专栏 1083

爬虫实战:抖音视频搜索数据爬虫开发实战(附完整Python源码)

【代码】抖音视频搜索数据爬虫开发实战(附完整Python源码)

weixin_61226361的博客 3596

自定义的Gallery 的 onKeyDown 方法没反应 执行没效果!!

今天做项目用到了 自定义的Gallery,感觉很好用,但是在过程中却遇到了一个让人十分蛋疼的事情。大家肯定都知道,咱们用gallery 的时候需要设置item之间的间隔,我也在xml中设置了android:spacing="7dp" ,然后写了两个按钮实现Gallery的滚动,但是奇怪的事情发生了,Gallery 竟然不滚动,恶心死了!!几番折腾,终于搞定了!! 这样既可: 在代码中 setS

独领fengsao的猫 2523

3DGS实战避坑指南:从零搭建到成功训练

本文详细介绍了3D Gaussian Splatting(3DGS)从环境配置到成功训练的实战避坑指南。涵盖git clone的正确使用、依赖安装的隐藏陷阱、CUDA版本兼容性解决方案、首次训练验证、常见报错急救方案、性能优化技巧及可视化调试方法,帮助开发者高效搭建和训练3DGS模型。

weixin_29053383的博客 365

BIOS/UEFI完全指南:从开机自检到超频魔改的底层硬件控制

计算机启动过程始于固件层,其核心是负责硬件初始化与引导的系统软件。传统BIOS基于16位实模式,寻址能力有限,而现代UEFI采用保护模式,支持图形界面与安全启动,实现了从概念到架构的革新。这一演进带来了显著的技术价值:更快的启动速度、更强的安全性以及对大容量存储设备的原生支持。在工程实践中,无论是解决“虚拟化技术禁用”问题、调整内存XMP配置以提升性能,还是为老主板“魔改”添加NVMe支持,都需要深入理解并操作BIOS/UEFI设置。掌握这些底层交互能力,是进行硬件调试、系统优化与故障排查的关键,也是连接抽

weixin_34236869的博客 457

android gallery控件的使用问题

最近在使用gallery控件的时候碰到一些问题,在这里总结一下。 如果自定义gallery的时候将imageview宽设置为match_parent,并且设置gallery的spacing属性大于等于0的情况下,gallery最多只会保持两个imageview,由于gallery实现的问题,如果你使用onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null)

lakeinchina的专栏 1465

YOLOv8 改进:添加 LSK 注意力机制

通过添加 LSK 注意力机制,YOLOv8 能够更有效地捕捉特征图上的重要信息,提高检测性能,尤其是在复杂场景下展现出色的表现。这种方法不仅适用于资源受限的设备,还能在丰富多样的实际应用中提供强劲支持。

走向CTO的路上... 1221

android gallery效果,Android开发实现Gallery画廊效果的方法

本文实例讲述了Android开发实现Gallery画廊效果的方法。分享给大家供大家参考,具体如下:画廊 使用Gallery表示,按水平方向显示内容,并且可以用手指直接拖动图片移动,一般用来浏览图片,被选中的选项位于中间,可以响应事件显示信息。xml布局文件基本语法属性列表/>Gallery支持4中xml属性属性名称描述android:animationDuration设置布局变化时动画的转换...

weixin_42369343的博客 2088

《企业AI能力地图构建:AI应用架构师的关键秘籍》

构建企业AI能力地图是企业在AI时代实现战略转型和创新发展的关键举措,它需要从评估企业当前AI能力出发,全面了解技术储备、数据资产和人才队伍的现状。将企业业务战略转化为具体的AI应用场景,并进行优先级排序,是确保AI应用能够为企业带来实际价值的重要步骤。通过深入理解业务战略和挖掘应用场景,企业可以找准AI应用的切入点,提高投资回报率。

AI架构全栈开发实战笔记 631

【RT-DETR多模态融合改进】| 自研 多模态大核选择模块:MM_LSK,适配多模态图像信息融合

本文记录的利用改进的多模态大核选择模块(MM-LSK)优化RT-DETR,构建可见光-红外双模态目标检测网络。在遥感等大尺寸图像的可见光-红外双模态小目标检测任务中,单模态检测易受光照、云雾、背景干扰等因素影响,且小目标外观信息匮乏,无法仅基于单模态外观实现较好的识别,因此需要融合双模态互补特性与广泛的跨模态上下文信息进行辅助。

Limiiiing的博客 381

Android 循环Gallery,3D Gallery以及HorizontalScrollView替代Gallery

/ Toast.makeText(Main.this, “点击了” + num, Toast.LENGTH_SHORT)// Toast.makeText(Main.this, “点击了” + num, Toast.LENGTH_SHORT)tvHint.setText(“3D Gallery:点击了” + num);tvHint.setText(“循环Gallery:点击了” + num);tvNum.setText(“循环Gallery:点击了” + num);

2401_89308058的博客 1012

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android 对Gallery的挖掘

一.循环Gallery 现在看一下官方API的文档,可以看到这样一句话:该类已被弃用,其他水平滚动窗口小部件包括HorizontalScrollView和ViewPager从支持库。因为这个类是API Level 1里面的,时间比较久了。虽说被弃用,也只是不再支持后续的更新,但是我们也可以用它来作为一个学习的例子。所以说即使是Gallery不让用了,我们还可以使用HorizontalScro

easyer2012的专栏 5840

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android 循环Gallery,3D Gallery以及HorizontalScrollView替代Gallery(1)

/ Toast.makeText(Main.this, “点击了” + num, Toast.LENGTH_SHORT)// Toast.makeText(Main.this, “点击了” + num, Toast.LENGTH_SHORT)tvHint.setText(“3D Gallery:点击了” + num);tvHint.setText(“循环Gallery:点击了” + num);tvNum.setText(“循环Gallery:点击了” + num);

2401_85730195的博客 630

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

最好的免费WordPress Gallery插件

如果您正在寻找最好的WordPress画廊插件,则有很多免费和付费选项。 有这么多的插件,找到适合您需求的插件可能是一个耗时的过程。 通常,您将从阅读一些有趣的文章开始。 之后,您将试用他们的演示,最后安装并学习如何使用找到的最佳示例。 在本教程中,我将帮助您找出最好的免费WordPress画廊插件供您使用。 此页面上列出的插件都受到很多用户的高度评价和下载。 我将总结每个功能的特点,并让...

代码教主 1976

Gallery is deprecated:Gallery 过期了怎么办?(一)

前段时间就发现Gallery这个控件被无情的打上了过期这个烙印。当时很好奇,谷歌为什么就让它过期了,不过那个时候项目忙就没有仔细去看了,反正过期了还能用,只是不维护了嘛。今天刚好有点时间就翻了翻android SDK文档: This class was deprecated in API level 16. This widget is no longer supported. Other h

极客公园 1万+

Gallery用法详解

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=182297&reltid=39709&pre_thread_id=0&pre_pos=1&ext=CB 官 方API的文档,可以看到这样一句话:该类已被弃用,其他水平滚动窗口小部件包括HorizontalScrollView和ViewPager从支...

qq_32534441的博客 4373

Gallery中内容居左的方法 ——重写Gallery

开发时遇到一个界面美观问题: Gallery 中的内容默认居中,想让其居左,找了很多资料都不太理想,最后终于找到一个重写Gallery 的办法,试验后发现是好用的~。 以下即为重写的 MyGallery 代码。 再在布局中把 <Gallery ... /> 换成使用自定义的 MyGallery 即可 <包名.MyGalle...

awbu30072的博客 150

matlab里gallery,gallery 矩阵

>> help galleryGALLERY Higham test matrices.[out1,out2,...] = GALLERY(matname, param1, param2, ...)takes matname, a string that is the name of a matrix family, andthe family's input parameters. ...

weixin_33687939的博客 708

Android Gallery画廊

Android Gallery画廊

Android开发-CXY的博客 2705
下一篇: Gallery----附录上一篇源码
YK_ing
博客等级 码龄16年 1粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值