android怎么实现类似抽屉效果

 我来答
huanglenzhi
推荐于2016-09-12 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517199
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  你说的效果实现可以分为两个部分:
  一、拖拽部分,这部分你实现让scrollview跟着你的手移动
  1、给scrollview添加onTouchListener或者自定义scrollview并重载其onTouchEvent方法。
  2、根据move不停设置scrollview的坐标
  你需要注意的是:event.getX()是你手指的坐标,而不是控件的坐标,很多人能够理解,但有的人写的时候会搞混。
  你需要做的是:取得4个坐标——
  (1)、你手指点下去的坐标,这个坐标在ACTION_DOWN中获得:primaryTouchCoord,这个坐标要一直保存,所以要在Touch事件外定义(类成员变量);
  (2)、你手指当前的坐标curTouchCoord,在每次Touch事件触发的时候用event.getY()获得,即在switch外或者ACTION_MOVE中获得;
  (3)、scrollview初始坐标primaryScrollViewCoord,这个坐标也在ACTION_DOWN中获得并且一直保存。
  (4)、scrollview最终坐标curScrollViewCoord,在ACTION_UP中获得。
  有了这四个坐标,就可以实现了。
  在ACTION_MOVE中判断最大和最小Y坐标,比如
  if(scrollview.getY<0){//让scrollview的坐标不超过你的最大和最小坐标
  scrollview.setY(0);
  }
  if(scrollview.getY>(int)(mScreenHeight()*0.9)){
  ...
  }
  if(scrollview.getY()>0&&scrollview.getY<(int)(mScreenHeight()*0.9)+可以滑动条件),则执行scrollView.setY(primaryScrollViewCoord+(curTouchCoord-primaryTouchCoord));

  上面完成后,scrollview就会跟着你的手指移动并且不会超过指定坐标

  由于是scrollview,你不得不判断什么时候scrollview有效,否则在scrollview移动的时候,scrollview的内部也会移动。

  上面的回答根据你实际情况修改。
  二、动画部分,你的手离开屏幕后scrollview向上/下动画
  在完成第一步后,你就已经完成了大半。
  以下在ACTION_UP中完成
  这时,在上面提到的primaryScrollViewCoord就会使用了,根据scrollview移动的距离判断是向上/下,然后使用animation(Set)完成接下来的动作。
  你这里将使用Animation animation = new TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta);
  注意4个坐标的意义,第一个为起始X坐标离当前坐标的距离,这里为0,第二个坐标为目的坐标到当前的距离,正负代表不同的方向;后面两个为Y坐标;
  你这里要设置animation.setFillAfter(true),使UI保存在动画后;如果要保存到动画前,则使用setFillBefore(true);
  animation.setDuration(int)设置动画事件
  然后scrollview.startAnimation()开始动画
  动画具体使用,网上可以找到,就不多说了。

  需要注意的:
  1、动画结束后一定要clear,可以给动画添加监听,在onAnimationEnd()里执行scrollview.clearAnimation(),如果可以的话,同时将scrollview设置成最大或最小坐标
  2、不要使用touch坐标直接设置scrollview坐标,那样可能会导致移位。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式