写在20120229:多点触控,屏幕缩略图

目前手机应用已经越来越多的用到了手势,其中Launcher中大家比较熟悉的就是屏幕缩略图,那么简单的实现就需要了解之前的那篇博客,关于ViewGroup和View的触屏事件的描述,这里也用到了比较重要的两个方法。onInterceptTouchEvent()和onTouchEvent()。
熟悉Launcher的人都会知道源码中会有一个DragLayer类,这个DragLayer是覆盖在WorkSpace上面的一层拖动层,那么要实现两只手指呈“捏”的手势,形成屏幕缩略图就得从该类做文章,重写onInterceptTouchEvent()、onTouchEvent()。
@override
public boolean onInterceptTouchEvent(MotionEvent ev){
if(ev.getPointerCount() == 2&&当前Launcher的一些拖动和显示状态符合生成缩略图){
switch(ev.getAction()& MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_POINTER_DOWN:
twoPointDis = (int)distance(ev);
setLinearEquation(ev);
}
showThumbnail = true;
return true;
}
showThumbnail = false;
//接下来处理不是两手捏的触屏之外的事件。
}

@override
public boolean onTouchEvent(MotionEvent ev){
int action = ev.getAction();
int x = (int) ev.getX();
int y = (int) ev.getY();
if(showThumbnail && ev.getPointerCount() == 2){
int dis;
switch(ev.getAction()& MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_MOVE:
dis=distance(ev);
if((twoPointDis - dis)>生成缩略图最小阈值(80像素,捏的时候移动的距离)&& 当前Launcher的一些拖动和显示状态符合生成缩略图)
thumbnailShow();//包括生成时的动画
else if(((twoPointDis - dis)<-生成缩略图最小阈值(80像素,捏的时候移动的距离)&& 当前Launcher的一些拖动和显示状态符合生成缩略图)
//根据选择的缩略图某一屏返回到workspace
}
return true;
}
showThumbnail = false;
//接下来处理不是两手捏的触屏之外的事件。
}

private int setLinearEquation(MotionEvent ev){
float x0 = ev.getX(0);
float x1 = ev.getX(1);
float y0 = ev.getY(0);
float y1 = ev.getY(1);

slop = (y1-y0)/(x1-x0);
y = (int) (y0-slop*x0);

}

private int distance(MotionEvent ev){
if(ev.getPointerCount()>1){
float x = ev.getX(0)-ev.getX(1);
float y = ev.getY(0)-ev.getY(1)
return (int)Math.sqrt(x*x+y*y);
}else{
return 1;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值