`

android手指缩放效果【转】

 
阅读更多

写这篇文章,是因为试了这篇《Android通过手势实现的缩放处理》http://www.oschina.net/code/snippet_16_2735 介绍的缩放代码在(G11 android2.3.3)上运行,完成没有缩放效果,只有一个蓝色的圆,跟着手指移动。。。。只好自己看下 android自带的demo和API,自己实现下缩放效果。
MotionEvent类中有个方法getActionMasked(),这个方法可以检查触摸的状态:
当只有一个触摸点时(只用一根手指触摸屏幕),按下是0,起来是1,移动是2;
当触摸点多于1时(多根手指触摸屏幕),按下是5,起来是6,移动是2;
可以使用MotionEvent的getPointerCount()方法检查当前屏幕有多少个触摸点。
实现代码在《Android通过手势实现的缩放处理》的基础上做了点修改。

import  android.app.Activity;
import  android.content.Context;
import  android.graphics.Canvas;
import  android.graphics.Color;
import  android.graphics.Paint;
import  android.os.Bundle;
import  android.view.MotionEvent;
import  android.view.View;

public   class  MultiTouchTestActivity  extends  Activity {
    @Override
    
public   void  onCreate(Bundle savedInstanceState) {
        
super .onCreate(savedInstanceState);
        View view 
=   new  MultiTouchView( this );

        setContentView(view);

    }

    
class  MultiTouchView  extends  View {
        
private   float  x1;
        
private   float  y1;
        
private   float  x2;
        
private   float  y2;

        
private   float  r  =  30F;
        
private   float  r1  =  0F;
        
private   float  r2  =  0F;
        
private   int  max  =   0 ;
        
public  MultiTouchView(Context context) {
            
super (context);
        }

        @Override
        
public   boolean  onTouchEvent(MotionEvent event) {
            
int  action  =  event.getActionMasked();
            
int  p  =  event.getPointerCount(); // 接触点数
             int  N  =  event.getHistorySize();
            
if (N  >  max){
                max 
=  N;
            }
           
            String sff 
=   "   " ;
            
// 只处理两点触摸
             if (p  ==   2   &&  action  ==  MotionEvent.ACTION_POINTER_1_DOWN){
                x1 
=  event.getX( 0 );
                y1 
=  event.getY( 0 );
                x2 
=  event.getX( 1 );
                y2 
=  event.getY( 1 );
                
            }
            
// 只处理两点触摸
             if (p  ==   2   &&  action  ==  MotionEvent.ACTION_MOVE){
                r1 
=  ( float ) Math.sqrt((x1  -  x2)  *  (x1  -  x2)  +  (y1  -  y2)
                        
*  (y1  -  y2))  /   2 ;
                
float  tx1  =  event.getX( 0 );
                
float  ty1  =  event.getY( 0 );
                
float  tx2  =  event.getX( 1 );
                
float  ty2  =  event.getY( 1 );
                r2 
=  ( float ) Math.sqrt((tx1  -  tx2)  *  (tx1  -  tx2)  +  (ty1  -  ty2)
                        
*  (ty1  -  ty2))  /   2 ;
            }
            
if (p  ==   2   &&  action  ==  MotionEvent.ACTION_POINTER_1_UP){
                r 
=  r  +  (r2  -  r1);
            }
            
if (p  ==   1 ){
                x1 
=  event.getX( 0 );
                y1 
=  event.getY( 0 );
            }
            
for  ( int  j  =   0 ; j  <  p; j ++ ) {
                
int  x  =  ( int )event.getX(j);
                
int  y  =  ( int )event.getY(j);
                sff 
=  sff  +   " ( "   +  x  +   " , "   +  y  +   " " ;
            }

            MultiTouchTestActivity.
this .setTitle(String.valueOf(action  +   "   "   +  p  +   "  r: "   +  ( int )r)  +   "  r1: "   +  

(
int )r1  +   "  r2: "   +  ( int )r2);
            invalidate();
            
return   true ;

        }

        @Override
        
protected   void  onDraw(Canvas canvas) {
            
super .onDraw(canvas);
            Paint paint 
=   new  Paint();
            paint.setColor(Color.BLUE);
            canvas.drawCircle(x1, y1, r 
+  r2  -  r1, paint);
        }
    }
}
在AVD(android2.3.3)中运行效果
http://www.blogjava.net/pengo

分享到:
评论
1 楼 sunnygql 2011-09-29  
试了试,可以运行。

相关推荐

    android通过手指缩放效果

    总结,实现Android手指缩放效果的关键在于理解和利用GestureDetector与MotionEvent,通过监听和处理触摸事件,结合Matrix类来改变视图的缩放属性。这一功能极大地增强了用户的交互体验,是许多Android应用中的必备...

    android图片缩放双击旋转效果

    在Android开发中,实现图片的缩放、双击旋转以及拖动展示是一项常见的需求,尤其在...通过对触摸事件的处理,实现图片的拖动、缩放和双击旋转效果。通过不断的迭代和优化,可以打造出一个既美观又实用的图片查看器。

    Android-一个Android图片缩放查看控件支持手势

    在Android中,为了实现特定的功能或视觉效果,开发者经常需要创建自定义的View。这种情况下,开发者需要继承自`View`或`ViewGroup`类,并重写其`onDraw()`方法来绘制自己的图形。在这个图片查看控件中,开发者可能...

    Android可缩放ImageView

    在Android开发中,ImageView是用于显示图像的基本控件,但默认情况下它并不支持用户缩放。为了实现可缩放的ImageView功能,开发者通常需要自定义一个控件或者使用第三方库。这里提到的"Android可缩放ImageView"可能...

    Android 图片双指缩放 单指拖拽 、拖到边界回弹

    `onScale()`方法在每次手指缩放时被调用,我们可以在这里获取到缩放的比例因子(scaleFactor),并根据这个因子更新图片的缩放比例。 2. 在`onTouchEvent()`方法中,将触摸事件传递给`ScaleGestureDetector`进行处理...

    Android 图片随手势放大缩小功能

    3. **两手指缩放**: 两手指同时触摸屏幕实现图片放大缩小,依赖于ACTION_POINTER_DOWN和ACTION_POINTER_UP事件。ACTION_POINTER_DOWN表示有第二个手指触摸屏幕,ACTION_POINTER_UP表示其中一个手指离开。通过比较...

    带缩放效果的圆形头像

    "带缩放效果的圆形头像"是一个专为Android平台设计的自定义视图,它改进了标准的CircleImageView,增加了动态缩放功能,使头像在加载或者点击时能够产生平滑的大小变化,提升应用的视觉效果。 首先,...

    android实现自定义RelativeLayout可拖动、缩放、旋转TextView

    本文将深入探讨如何在Android中实现一个自定义的RelativeLayout,使其能够支持TextView的拖动、缩放和旋转功能。 首先,我们需要创建一个新的自定义布局类,继承自RelativeLayout。在这个类中,我们将重写一些关键...

    Android 可缩放ImageView

    5. **平滑滚动和缩放**:为了提供更流畅的体验,组件可能实现了平滑滚动和渐进式缩放,通过动画效果让这些操作看起来更加自然。 6. **性能优化**:处理大图时,可缩放ImageView可能使用Bitmap的位图操作技术,如...

    Android-可拖动可放大缩放的ImageView

    通过阅读和理解这些代码,开发者可以更好地学习如何自定义Android UI组件,实现更复杂的交互效果。 总的来说,这个自定义的`DragZoom ImageView`是一个强大的工具,它结合了Android的触摸事件处理、Matrix变换以及...

    android手指移动动画效果

    在Android开发中,动画效果是提升用户体验的重要手段之一,尤其在触摸交互中,手指移动动画效果能够让用户感受到更直观、流畅的操作反馈。本篇将详细探讨如何在Android中实现手指移动动画效果,主要关注`...

    android 图片拼接 缩放 特效 拖动 翻转

    本文将深入探讨如何在Android平台上实现图片的拼接、缩放、特效、拖动以及翻转功能,这些都是移动应用中常见的交互和视觉元素。我们将以`DrawDemo`为例,来阐述这些技术的实现细节。 1. **图片拼接**: 图片拼接是...

    android缩放拖动效果

    在Android开发中,实现缩放和拖动效果是创建用户友好界面的重要部分,尤其是在开发交互式的应用程序时。本文将深入探讨如何在Android中实现这两种功能,并对比不同的实现方式。 首先,我们来了解一下缩放(Zooming...

    Android-可以缩放的画布

    - **postScale()** 和 **preScale()**:这两个方法分别在当前矩阵后面和前面应用缩放操作,可以用来实现不同的缩放效果,例如连续缩放或者相对原点的缩放。 4. **触摸事件处理** 为了响应用户的缩放手势,需要...

    Android拖动,缩放,自定义内容控件源码

    在ACTION_MOVE事件中,通过计算手指移动的差值来更新View的坐标,实现拖动效果。对于缩放,我们可以利用Matrix类来处理。首先,获取到原始的Matrix,然后在ACTION_DOWN和ACTION_UP之间,根据两个手指之间的距离变化...

    Android自定义ImageView实现缩放,回弹效果

    我们需要监听用户的触摸事件,然后根据手指间的距离变化来计算缩放比例。可以使用 ScaleGestureDetector 类来帮助处理这些手势: ```java private ScaleGestureDetector mScaleDetector; @Override protected void...

    android图片预览缩放

    为了实现平滑的滚动和缩放效果,开发者通常会结合`Scroller`或`Animator`类。`Scroller`用于处理物理性的滑动动画,`Animator`则可以实现更为复杂的动画效果。通过计算目标位置和当前位置的差值,逐步更新`Matrix`并...

    android imageview 图片缩放

    本文将深入探讨如何在Android中实现ImageView的图片缩放功能,同时结合异步加载和Activity的半透明效果,提升用户体验。 首先,我们要理解Android中ImageView的基本用法。ImageView可以设置为固定大小或根据图片...

    android 图片手势缩放

    5. **平滑动画**: 为了提供更好的用户体验,可以使用`ScalableInterpolator`或其他插值器来平滑地过渡缩放效果。这使得图片在缩放过程中更加自然,避免突然跳变。 6. **边界检查**: 当图片被缩放到一定程度时,需要...

    Android单点平移多点缩放旋转Demo

    实现流畅的平移、缩放和旋转效果,性能优化必不可少。可以使用`硬件加速`(`android:hardwareAccelerated="true"`),利用GPU来加速视图的渲染。此外,适时更新视图并避免不必要的重绘也是提高性能的关键。 7. **...

Global site tag (gtag.js) - Google Analytics