登录|注册
日志 教程
当前位置: 教程  >  游戏开发  >  手机游戏开发  >  正文

Android Launcher 拖放功能深入研究(5)

作者:吴镇风 发表于 2011-7-3 14:53:50     评论(0)     阅读(1613)     

其实函数很简单,就是记录一些参数,然后对view图片做一个缩放处理,并且准备一个tween动画,在长按桌面图标后图标跳跃到手指上显示该动画,了解这些,有助于理解函数dragView.show

  //windowToken来自与workspace.onattchtowindow时候获取的view 所有attch的window标识,有这个参数,可以把dragview添加到

  workspace所属的同一个window对象

  //touchX,手指点击在屏幕的位置x

  //touchy,手指点击在屏幕的位置y

  public void show(IBinder windowToken, int touchX, int touchY) {

  WindowManager.LayoutParams lp;

  int pixelFormat;

  pixelFormat = PixelFormat.TRANSLUCENT;

  //布局参数值的注意的是view位置参数,

  //x=touchX-mRegistrationX=touchX-(registrationX + (DRAG_SCALE / 2))=手指点击位置-view坐标与手指点击位置偏差加上缩放值

  lp = new WindowManager.LayoutParams(

  ViewGroup.LayoutParams.WRAP_CONTENT,

  ViewGroup.LayoutParams.WRAP_CONTENT,

  touchX-mRegistrationX, touchY-mRegistrationY,

  WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL,

  WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN

  | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS

  /*| WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM*/,

  pixelFormat);

  // lp.token = mStatusBarView.getWindowToken();

  lp.gravity = Gravity.LEFT | Gravity.TOP;

  lp.token = windowToken;

  lp.setTitle("DragView");

  mLayoutParams = lp;

  //dragview的父类是Window,也就是说dragview可以拖放到屏幕的任意位置

  mWindowManager.addView(this, lp);

  mAnimationScale = 1.0f/mScale;

  //播放开始拖动动画(直观感觉是图标变大了)

  mTween.start(true);

  }

  2,拖放过程

  拖放过程的处理需要深入了解DragController.onTouchEvent(MotionEvent ev)函数的实现,我下面列出关键的MotionEvent.ACTION_MOVE部分代码并作出注释说明

  case MotionEvent.ACTION_MOVE:

评论
显示
悄悄话
公司简介 | 联系方式 | 诚聘英才 | 版权声明 | 友情链接 | 在线咨询 | 在线报名
Copyright 2008© 汇众益智(北京)教育科技有限公司. All Rights Reserved
京ICP备09092043号 京公网安备11010802009023号