主题:Android通过手势实现的缩放处理(转http://www.javaeye.com/topic/516876)
2010-10-22 16:42
477 查看
发表时间:2009-11-14 最后修改:2009-11-18
引用 收藏
相关文章:
求两直线的交点坐标
看看这是啥?
Android 2d物理引擎Box2d的使用示例
推荐圈子: java2d
更多相关推荐
原文《我认为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一样缩放图片、网页的方法。时间仓促,若有不对,欢迎指出。
引用 收藏
相关文章:
求两直线的交点坐标
看看这是啥?
Android 2d物理引擎Box2d的使用示例
推荐圈子: java2d
更多相关推荐
原文《我认为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);
}
}
}
/** * ... * * @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一样缩放图片、网页的方法。时间仓促,若有不对,欢迎指出。
相关文章推荐
- 主题:Android通过手势实现的缩放处理(转http://www.javaeye.com/topic/516876)
- 【Android通过手势实现的缩放处理】
- Android通过手势实现的缩放处理实例代码
- 【Android通过手势实现的缩放处理】
- 【Android通过手势实现的缩放处理】
- Android通过手势实现的缩放处理
- Android通过手势实现的缩放处理
- Android通过手势实现的缩放处理
- 【Android通过手势实现的缩放处理…
- 【Android通过手势实现的缩放处理】
- 通过手势实现Android自定义View的缩放
- Android实现通过手势控制图片大小缩放的方法
- Android实现 通过手势随意缩放、移动ImageView图片
- Android实现 通过手势随意缩放、移动ImageView图片
- Android移动开发-手势事件处理MotionEvent的实现
- android HTTP 通信, XML 解析, 通过 Hander 实现异步消息处理
- Android实现图文混排(2) 通过webview实现 并实现点击 图片处理事件
- Android开发之ImageView通过matrix实现两点缩放和图片拖动
- android资料--Android通过手势(多点)缩放和拖拽图片
- Android之实现手势缩放ImageView