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入门到精通教程
查看: 475|回复: 0

开发交流:主题:Android通过手势实现的缩放处理

[复制链接]

该用户从未签到

发表于 2011-10-24 09:55:51 | 显示全部楼层 |阅读模式
原文《我认为HTC HERO-ROM支持所谓的多点触摸是个谎言》我觉得太具有攻击性,和我平时的风格不大相符,故撤换之。


看见网上很多人评论HTC的HERO是支持多点触摸的,我也心痒痒了很久。要知道,如果能找到绕过Google实现多点触摸的真理,那将会引起Android软件设计上的一场革命...

网络上传言HTC的HERO-ROM支持多点触摸的论证大多源于浏览网页和图片时,能像IPhone一样通过手势来控制页面的大小。但是我认为,就算不通过尚未公布的多点触摸(很怀疑HTC目前的电容屏是否只支持两点触摸而已,并不是多点。之前有看过一篇文章介绍电容屏的区别,如果我以后能找到一定贴上来,当然这是题外话了),我们一样能够利用现有的API实现HERO浏览图片和网页的缩放功能。

主要原理是onTouchEvent事件中的参数MotionEvent,它有一个getSize()方法。在一个点的时候,该方法永远返回0,而在两个触电的时候,该方法则根据两点相对位置变化而返回不同的值。我们只需计算出两点之间的距离变化,距离的大小表明我们希望目标变化的趋势。而getX()和getY()方法则永远座落在两触点之间,这样趋势和目标我们都有了。剩下的就是对目标根据趋势进行放大或缩小即可。

下边是根据我前边描述的思路编写的代码:让一个蓝色的圆根据手势放大或者缩小。流感中,代码就不指望太清晰了。


java代码

/**

* ...

*

* @author vlinux

*

*/

public class MultiTouchTestActivity extends Activity {

        /** Called when the activity is first created. */

        @Override

        public void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState);

                // setContentView(R.layout.main);

                View view = new MultiTouchView(this);

                setContentView(view);

        }



        class MultiTouchView extends View {



                private float x1;

                private float y1;

                private float x2;

                private float y2;



                public MultiTouchView(Context context) {

                        super(context);

                        // TODO Auto-generated constructor stub

                }



                @Override

                public boolean onTouchEvent(MotionEvent event) {

                        // TODO Auto-generated method stub



                        float size = event.getSize();



                        int szi = (int) size;

                        int dxi = szi >> 12;

                        int dyit = ((1 << 12) - 1);

                        int dyi = szi & dyit;



                        DisplayMetrics metrics = getResources().getDisplayMetrics();

                        float dx = metrics.widthPixels * dxi / (float) dyit;

                        float dy = metrics.heightPixels * dyi / (float) dyit;



                        x1 = event.getX();

                        y1 = event.getY();



                        x2 = x1 + dx;

                        y2 = y1 + dy;



                        invalidate();



                        return true;

                }



                @Override

                protected void onDraw(Canvas canvas) {

                        // TODO Auto-generated method stub

                        super.onDraw(canvas);



                        float r = (float) Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2)

                                        * (y1 - y2)) / 2;

                        r = 50 >= r ? 50 : r;



                        Paint paint = new Paint();

                        paint.setColor(Color.BLUE);

                        canvas.drawCircle(x1, y1, r, paint);



                }



        }



}
复制代码



以上是我对HERO-ROM如何实现类似IPHONE一样缩放图片、网页的方法。时间仓促,若有不对,欢迎指出。









MultiTouchTest.rar (27.03 KB, 下载次数: 0)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 01:53 , Processed in 0.300331 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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