`
mengsina
  • 浏览: 191497 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android-Gallery中实现多点触摸

阅读更多
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线。
另外android.view.ScaleGestureDetector好像也是专门做这个的。。

转载:http://disanji.net/2011/08/28/android-gallery%E4%B8%AD%E5%AE%9E%E7%8E%B0%E5%A4%9A%E7%82%B9%E8%A7%A6%E6%91%B8/
分享到:
评论

相关推荐

    Multitouch 多点触摸ImageView效果

    总之,"Multitouch多点触摸ImageView效果"项目展示了如何在Android平台上利用多点触摸技术实现图片的平滑缩放,结合Gallery组件实现图片选择。这不仅提高了用户与应用的互动性,也体现了Android开发中对用户体验的...

    多点触控 图片的缩放

    在Android中,`Gallery`类已经被弃用,但可以使用`RecyclerView`配合`LinearLayoutManager`和`SnapHelper`来实现类似的功能。在iOS中,可以使用`UICollectionView`和自定义布局来达到目的。 1. 初始化Gallery:创建...

    Android开发各种demo集合

    - **多点触控:** 处理多点触摸事件,实现更加复杂的交互体验。 - **手势定制:** 自定义手势动作,如双击、长按等。 - **应用场景:** 游戏控制、地图缩放、图像浏览等。 #### 7. Android文件经典总结——Demo **...

    android 一个图片浏览器的实现。

    在早期的Android版本中,存在一个名为`Gallery`的视图组件,它允许用户水平滚动浏览多个项目,常用于图片浏览。然而,从Android 3.0(API级别11)开始,`Gallery`组件已被废弃,取而代之的是`GridView`或`...

    android Gallery相册浏览器

    在Android开发中,`Gallery`组件是用于展示一系列图片或者视图的一个滚动控件,它允许用户通过水平滑动来浏览多个项目。然而,自Android 3.0(API级别11)开始,原生的`Gallery`组件已经被弃用,取而代之的是更灵活...

    三维Gallery

    在Android中,多点触控依赖于MotionEvent对象,它包含了多个触摸点的信息。开发者需要在`onTouchEvent()`中处理ACTION_POINTER_DOWN和ACTION_POINTER_UP等事件,计算手指间的距离和角度变化,从而实现多点触控的效果...

    Gesture_MutiTouch_Widget及翻页效果例子,备份一下

    这个例子可能是为了帮助开发者理解和实践如何在Android应用中实现这些交互效果。 首先,我们来讨论多点触摸(MultiTouch)。在Android中,`MotionEvent`类是处理触摸事件的核心,它包含了用户在屏幕上触摸和移动...

    精通ANDROID 3(中文版)1/2

    25.2.2 自Android 2.2开始的多点触摸  25.3 触摸地图  25.4 手势  25.4.1 捏合手势  25.4.2 GestureDetector和OnGestureListener  25.4.3 自定义手势  25.4.4 Gestures Builder应用程序  25.5 参考...

    安卓开发-HoneycombGallery.zip

    在安卓开发领域,Honeycomb Gallery是一个专为Android 3.0(API级别11)及以上版本设计的组件,它提供了展示多张图片或其它内容的互动式画廊体验。这个压缩包“安卓开发-HoneycombGallery.zip”可能包含相关的源代码...

    精通Android 3 (中文版)2/2

    25.2.2 自Android 2.2开始的多点触摸  25.3 触摸地图  25.4 手势  25.4.1 捏合手势  25.4.2 GestureDetector和OnGestureListener  25.4.3 自定义手势  25.4.4 Gestures Builder应用程序  25.5 参考...

    android ImageView 的几点经验总结

    例如,创建一个名为`MyImageView`的子类,可以添加额外的功能,比如多点触摸缩放。在自定义的`MyImageView`中,可以监听触摸事件,计算两点间的距离变化,以此来实现图片的放大和缩小。通过`onTouchEvent()`方法处理...

    摩托罗拉 XT800

    这款手机配备了高分辨率的触摸屏,支持多点触控,为用户提供了清晰、生动的视觉效果。它搭载了强劲的处理器,确保了系统运行的流畅性和应用程序的快速响应。XT800还支持高速3G网络和Wi-Fi连接,让用户可以随时随地...

Global site tag (gtag.js) - Google Analytics