首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android指头缩放效果【转】

2012-08-09 
android手指缩放效果【转】写这篇文章,是因为试了这篇《Android通过手势实现的缩放处理》http://www.oschina.n

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)中运行效果
android指头缩放效果【转】

1 楼 sunnygql 2011-09-29   试了试,可以运行。

热点排行