Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 540|回复: 0

[实例教程]Gallery中实现多点触摸

[复制链接]

该用户从未签到

发表于 2011-10-22 12:45:26 | 显示全部楼层 |阅读模式
Android源码自带的Gallery不支持两个手指头缩放图片这样的多点触摸功能,所以这个得自己添加。

具体添加的代码很简单,修改一下/packages/apps/Gallery/src/com/android/camera/ViewImage.java中的rootListener就行了。



下面的代码只做了两点的情况,根据两点之间的距离长度的变化计算出缩放比例:

float scale = value / baseValue;

再乘上图片原本的缩放比例:

originalScale = mImageView.getScale();

originalScale*scale

得出图片的最终大小。



代码用到了ImageViewToucHbase提供的几个现成的方法:

mImageView.getScale()//当前的缩放比例。

mImageView.zoomTo(float scale, float centerX, float centerY)//最终缩放到多大比例。centerX和centerY是缩放的中心点,可以用两个手指的触摸点中间的那个点:[x0+x1)/2,(y0+y1)/2]。 OnTouchListener rootListener = new OnTouchListener() {//modified by lianbing 2011.5.23

private float baseValue, lastScale;

private float originalScale;

            public boolean onTouch(View v, MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_DOWN) {

            baseValue = 0;

            lastScale = 0;

originalScale = mImageView.getScale();

        }

if (event.getAction() == MotionEvent.ACTION_MOVE) {

            if (event.getPointerCount() == 2) {

                float x = event.getX(0) - event.getX(1);

                float y = event.getY(0) - event.getY(1);

                float value = (float)Math.sqrt(x * x + y * y);//计算两点的距离

                // System.out.println("value:" + value);

                if (baseValue == 0) {

                    baseValue = value;

                } else {

                    float scale = value / baseValue;//当前两点间的距离除以手指落下时两点间的距离就是需要缩放的比例。

                    if (Math.abs(lastScale - scale) > 0.1) {//只有比例变化大于0.1时才进行缩放。

                        lastScale = scale;

                        // scale the image

                        mImageView.zoomTo(originalScale*scale, x + event.getX(1), y + event.getY(1));

                    }

                }

                return true;

            }

        }

                buttonListener.onTouch(v, event);

                mGestureDetector.onTouchEvent(event);

                // We do not use the return value of

                // mGestureDetector.onTouchEvent because we will not receive

                // the "up" event if we return false for the "down" event.

                return true;

            }

        };
另外,发现一部分机器上面有这样一个问题,在机器用USB连接到PC上时,触摸有些乱。平时用自己的机器在看小说时,如果手机正连着充电器,也会有触摸不准确的问题。

所以调试这一部分的程序时,最好拔掉USB线。





PS:今天才发现有个类专门做这东西的.

android.view.ScaleGestureDetector
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-19 00:15 , Processed in 0.379015 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表