如何使用Android实现单页面浮层可拖动视图

  介绍

这篇文章将为大家详细讲解有关如何使用Android实现单页面浮层可拖动看来,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

在DragframeLayout中的onTouchEvent一直接收不到触摸消息,而且在onInterceptTouchEvent的时候,并没有触发ViewDragHelper.tryCaptureView方法,因此诞生了另一种比较原始的方法:通过自定义可拖动视图来实现

主要方法:

initEdge:设置可拖动视图能拖动范围的初始边界,一般情况下为父布局的边界。注意view.getLeft……等会获取到会0,我是在网路数据返回的情况下设置边界,并显示的。也有方法开一个子线程获取。

onTouchEvent:拖动的计算以及重新布局

代码:

import  android.content.Context;   import  android.support.annotation.Nullable;   import  android.support.v7.widget.AppCompatImageView;   import  android.util.AttributeSet;   import  android.view.MotionEvent;/* *   ,* Created  by  hq 提醒2017/10/10。   *大敌;参考:http://blog.csdn.net/zane_xiao/article/details/51188867   ,*/public  class  DragImageView  extends  AppCompatImageView  {   String 才能;TAG =,“DragImageView";      public 才能DragImageView (Context 上下文),{   ,,,这(上下文,null);   ,,}      public 才能;DragImageView (Context 上下文,@Nullable  AttributeSet  attrs), {   ,,,(上下文,attrs,, 0);   ,,}      public 才能;DragImageView (Context 上下文,@Nullable  AttributeSet  attrs,, int  defStyleAttr), {   ,,,超级(上下文,attrs, defStyleAttr);   ,,}      ,/* *   ,,*,设置在父布局中的边界   ,,*,@param  l   ,,*,@param  t   ,,*,@param  r   ,,*,@param  b   ,,*/public 才能;void  initEdge (int  l, int  t, int  r, int  b), {   ,,,edgeLeft =, l;   ,,,edgeTop =, t;   ,,,edgeRight =, r;   ,,,edgeBottom =, b;   ,,}      int 才能;edgeLeft, edgeTop,, edgeRight,, edgeBottom;   int 才能;lastX, lastY,, movex,, movey,, dx, dy;      @Override才能   public 才能;boolean  onTouchEvent (MotionEvent 事件),{   ,,,switch  (event.getAction ()), {   ,,,,,case  MotionEvent.ACTION_DOWN:   ,,,,,,,lastX =, (int), event.getRawX ();   ,,,,,,,lastY =, (int), event.getRawY ();   ,,,,,,,movex =, lastX;   ,,,,,,,movey =, lastY;   ,,,,,,,休息;   ,,,,,case  MotionEvent.ACTION_MOVE:   ,,,,,,,dx =, (int), event.getRawX(),安康;lastX;   ,,,,,,,dy =, (int), event.getRawY(),安康;lastY;      ,,,,,,,int  left =, getLeft (), +, dx;   ,,,,,,,int  top =, getTop (), +, dy;   ,,,,,,,int  right =, getRight (), +, dx;   ,,,,,,,int  bottom =, getBottom (), +, dy;   ,,,,,,,if  (left  & lt;, edgeLeft), {   ,,,,,,,,,left =, edgeLeft;   ,,,,,,,,,right =, left  +, getWidth ();   ,,,,,,,}   ,,,,,,,if  (right 祝辞,edgeRight), {   ,,,,,,,,,right =, edgeRight;   ,,,,,,,,,left =, right 作用;getWidth ();   ,,,,,,,}   ,,,,,,,if  (top  & lt;, edgeTop), {   ,,,,,,,,,top =, edgeTop;   ,,,,,,,,,bottom =, top  +,获得();   ,,,,,,,}   ,,,,,,,if  (bottom 祝辞,edgeBottom), {      ,,,,,,,,,bottom =, edgeBottom;   ,,,,,,,,,top =, bottom 作用;获得();   ,,,,,,,}      ,,,,,,,布局(,,,,对,,底部);   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何使用Android实现单页面浮层可拖动视图