`
meohao
  • 浏览: 94341 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

写在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;
  }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics