`

Gallery 两点触摸

 
阅读更多
http://www.eoeandroid.com/thread-98726-1-1.html




Android源码自带的Gallery不支持两个手指头缩放图片这样的多点触摸功能,所以这个得自己添加。
具体添加的代码很简单,修改一下/packages/apps/Gallery/src/com/android/camera/ViewImage.java中的rootListener就行了。




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


java代码:
float scale = value / baseValue;
复制代码


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


java代码:
originalScale = mImageView.getScale();
originalScale*scale
复制代码


得出图片的最终大小。
代码用到了ImageViewTouchBase提供的几个现成的方法:
mImageView.getScale()//当前的缩放比例。
mImageView.zoomTo(float scale, float centerX, float centerY)//最终缩放到多大比例。centerX和centerY是缩放的中心点,可以用两个手指的触摸点中间的那个点:[x0+x1)/2,(y0+y1)/2]。


java代码:
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好像也是专门做这个的。
分享到:
评论

相关推荐

    Multitouch 多点触摸ImageView效果

    同时,为了保持平滑的缩放效果,我们需要将pivotPoint设置为两个触点的中点,使得缩放中心点与用户的触摸点一致。 接下来是Gallery组件的使用。Gallery是一个可以左右滑动浏览的控件,适合用于展示一系列的图片。...

    Android 滑动效果 Gallery + GridView

    本主题主要聚焦于两种常见的滑动组件:Gallery和GridView,它们都是Android SDK中内置的视图组件,常用于展示多张图片或者项目列表。下面我们将深入探讨这两个组件的特性、用法以及如何在实际项目中实现它们的滑动...

    Gallery实现3D效果滑动

    在"CustomGalleryLikeiPhone(3D相册)"这个项目中,开发者可能已经封装了以上技术点,提供了一个易于集成的3D Gallery组件。你可以通过阅读源码,学习如何将这些技术应用到自己的项目中,以提升用户体验。 总之,...

    支持元素惯性拖放和多点触摸手势的js插件

    - `gallery.html`: 实现了一个图片画廊的拖放和缩放功能,展示了多点触摸手势的应用。 - `index.html`: 主要页面,可能包含插件的基本用法和介绍。 - `events.html`: 展示了插件触发的不同事件,如开始拖动、拖动中...

    Gallery与其Item的Click事件冲突的解决办法

    例如,当检测到用户的触摸行为为`ACTION_MOVE`时,可以选择直接返回`true`,从而让当前`Gallery`实例拦截事件,阻止其传递给内部的`Item`。这样一来,就可以保证滑动操作不受影响。 ```java @Override public ...

    android gallery 源码

    综上所述,这个"android gallery 源码"项目涵盖了Android UI设计、触摸事件处理、动画实现、图片处理、自定义Adapter等多个关键知识点,对于学习Android开发,尤其是UI交互和性能优化具有一定的参考价值。...

    android Gallery 源码

    1. **触摸事件处理**:`Gallery`的滑动体验主要由其对触摸事件的处理实现。它重写了`onTouchEvent()`方法,解析`MotionEvent`,通过计算速度和方向来实现平滑的滚动。 2. **布局管理**:`Gallery`使用`LayoutParams...

    gallery放大缩小拖拽

    在移动应用中,可能需要监听`onTouchEvent`,并识别出连续快速的两次触摸,然后执行相应的放大或缩小操作。Android和iOS都提供了内置的缩放手势识别机制,如`ScaleGestureDetector`和`UIPinchGestureRecognizer`,...

    Android Gallery轮播图

    下面将详细介绍这个自定义轮播图实现的关键知识点。 首先,`Gallery`是Android SDK中内置的一个视图类,它允许用户水平滚动一组项目,类似于一个水平方向的ListView。然而,原生的Gallery组件并不完全满足所有需求...

    在listview里面嵌套gallery

    在Android开发中,"在ListView里面...总之,将Gallery嵌套在ListView中需要深入理解这两个组件的工作原理,并妥善处理它们之间的交互。通过细心的布局设计、事件处理和性能优化,可以实现一个既美观又实用的混合视图。

    Android_UI_Gallery

    - `onFling()`和`onScroll()`:可以通过重写`Gallery`的这两个触摸事件处理方法来自定义滑动行为。 - `setCallbackDuringFling(boolean duringFling)`:控制在用户滑动时是否执行回调。 6. **性能优化**: 由于`...

    android 靠左边gallery源码.zip

    在"android 靠左边gallery源码.zip"这个压缩包中,包含了两个关键的文件夹:left-locked-gallery-lib和left-locked-gallery,它们分别对应着一个定制的Gallery组件,这个组件被设计成只能向左滑动,即“靠左边锁定”...

    三维Gallery

    在Android平台上,开发一款名为“三维Gallery”的应用是一项技术挑战,它涉及到图像处理、用户界面设计以及多点触控交互等多个关键知识点。首先,我们来深入理解这些核心概念。 一、Android Gallery Android ...

    可以双击放大的gallery

    总的来说,这个项目涉及到了Android UI设计、手势检测、触摸事件处理以及动画应用等多个关键知识点。对于初学者来说,这是一个很好的实践项目,可以帮助他们深入理解Android应用开发中的视图控件、手势识别以及用户...

    android,Gallery,页面翻转

    例如,`flip_in.xml`和`flip_out.xml`,这两个动画应该包含`rotate`属性,指定旋转的角度和中心点。 3. **应用动画**:在`getView()`方法中,根据当前条目的位置判断是否需要启动翻转动画。如果需要,使用`...

    android gallery

    2. **GridView与RecyclerView**: 在构建Gallery应用时,常用到这两种布局管理器。GridView展示数据为网格形式,适合图片浏览,而RecyclerView则是更灵活的视图管理器,支持无限滚动和高效的内存管理,是现代Android...

    仿安卓市场广告条(中心条目放大且无限循环的gallery)

    首先,要实现无限循环的效果,开发者需要在Gallery的两端添加额外的广告条目,当用户滑动到首尾时,无缝切换到另一端,使用户感觉广告条一直在循环播放。这通常需要重写Gallery的滚动逻辑,处理边界条件,并确保滚动...

    模拟立体翻转效果,非Gallery实现.zip

    总的来说,这个项目涉及的知识点包括但不限于:Android自定义视图、属性动画、触摸事件处理、ViewPager或RecyclerView的使用,以及可能的滑动监听器实现。对于安卓开发者,尤其是正在做毕业设计或课程设计的学生来说...

    wheelView滚动选取时间(gallery竖向排列滚动)

    这通常涉及到对Gallery的布局属性、滚动机制以及触摸事件处理进行修改。可能的方法包括改变`android:orientation`属性,调整滚动方向,以及覆盖`onTouchEvent`方法来处理垂直滑动。 时间滚轮通常包括小时和分钟两...

    安卓Android源码——Gallery+ImageSwitcher+ViewFlipper实现手机查看壁纸效果.zip

    它内部包含两个ImageView,切换时会使用动画效果过渡,使得用户体验更加流畅。 3. **ViewFlipper组件**:虽然在标题中提到了ViewFlipper,但在实际实现中可能并未直接使用,因为ImageSwitcher已经包含了类似的功能...

Global site tag (gtag.js) - Google Analytics