目前手机应用已经越来越多的用到了手势,其中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;
}
}
写在20120229:多点触控,屏幕缩略图
猜你喜欢
转载自meohao.iteye.com/blog/1912147
今日推荐
周排行