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

发布时间:2021-04-16 12:46:44

来源:亿速云

阅读:102

作者:小新

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

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

主要方法:

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

onTouchEvent:拖动的计算以及重新layout

代码: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 on 2017/10/10.

* 参考:http://blog.csdn.net/zane_xiao/article/details/51188867

*/

public class DragImageView extends AppCompatImageView {

String TAG = "DragImageView";

public DragImageView(Context context) {

this(context, null);

}

public DragImageView(Context context, @Nullable AttributeSet attrs) {

this(context, attrs, 0);

}

public DragImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, 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 event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

lastX = (int) event.getRawX();

lastY = (int) event.getRawY();

movex = lastX;

movey = lastY;

break;

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

left = edgeLeft;

right = left + getWidth();

}

if (right > edgeRight) {

right = edgeRight;

left = right - getWidth();

}

if (top

top = edgeTop;

bottom = top + getHeight();

}

if (bottom > edgeBottom) {

bottom = edgeBottom;

top = bottom - getHeight();

}

layout(left, top, right, bottom);

lastX = (int) event.getRawX();

lastY = (int) event.getRawY();

break;

case MotionEvent.ACTION_UP:

//避免滑出触发点击事件

if ((int) (event.getRawX() - movex) != 0

|| (int) (event.getRawY() - movey) != 0) {

return true;

}

break;

default:

break;

}

return super.onTouchEvent(event);

}

}

布局:<?xml  version="1.0" encoding="utf-8"?>

xmlns:custom="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/df_content"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/default_white"

android:scrollbars="none">

android:id="@+id/network_tab_layout"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/default_white">

...........

android:id="@+id/iv_drag_adver"

android:layout_width="40dp"

android:layout_height="40dp"

android:layout_gravity="right|top"

android:src="@drawable/ic_launcher" />

关于“如何使用Android实现单页面浮层可拖动view”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

android+浮层布局,如何使用Android实现单页面浮层可拖动view相关推荐

  1. android子view获取父布局,Android获取布局父ID(Android get layout parent id)

    Android获取布局父ID(Android get layout parent id) 我想知道View和ViewParent有什么区别? 我想获取ImageView父级的Id,但我不能这样做: m ...

  2. Android延伸布局到状态栏,Android 状态栏透明

    前言:最近项目大量用到状态栏透明,网上也出现很多库可以直接拿来用,个人认为没有必要那么重引用到一个库(有木有同学和我有一样的想法),所以研究了一番,在此做个记录加强记忆也便后期查阅,如果无意中有幸能帮 ...

  3. android 3d布局轮播,android 图片/视频混合轮播控件banner

    android 图片/视频混合轮播控件banner 在youth5201314的图片轮播控件做的修改 原作者github地址:https://github.com/youth5201314/banne ...

  4. android 微信布局 字体,【Android】底部Tab+ViewPager(仿微信界面)

    感谢 github的作者:wuyexiong 效果图(图片和文字都有渐变效果) 实现 主要用到自定义一个LinearLayout和ImageView 1.BottomIconView继承自ImageV ...

  5. android五大布局的作用,Android五大布局与实际应用详解

    Android总体有五大布局: 线性布局(LiearLayout): 屏幕垂直或水平方向布局. 帧布局(FrameLayout):控件从屏幕左上角开始布局. 相对布局(RelativeLayout): ...

  6. android layout布局 有哪些,Android 常用布局 介绍与使用

    读前思考 学习一门技术或者看一篇文章最好的方式就是带着问题去学习,这样才能在过程中有茅塞顿开.灯火阑珊的感觉,记忆也会更深刻. 有哪些常用的布局? 每一种布局有何特点与不同? 布局上如何优化? 1. ...

  7. android线性布局控制间隙,Android线性布局(Linear Layout)

    Android 中常用布局 [1] 线性布局 [2] 相对布局 [3] 帧布局  -- FrameLayout [4] 表格布局 -- !!!一个 tabrow 就代表一行 [5] 绝对布局   -- ...

  8. android spinner布局,重拾Android之路之Spinner

    引言 最近做的项目想仿做滴滴出行首页的悬浮框. 正文 效果参考滴滴出行; 工欲善其事,必先利其器!来...... Spinner详解 Spinner控件初始化时,会调用它的选择监听事件,默认选择第一个 ...

  9. android动态布局实例教程,Android 动态解析布局,实现制作多套主题

    问题背景: 之前做过一个项目(随心壁纸),主要展示过去每期的壁纸主题以及相应的壁纸,而且策划要求,最好可以动态变换主题呈现方式,这样用户体验会比较好.嗯,好吧,策划的话,咱们也没法反驳,毕竟这样搞,确 ...

  10. android五大布局的用法,android:stretchColumns用法

    TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但实际上,会经常在代码里使用TableLayout,例如做出表格的效果.本文主要介绍TableLayout的基本使用 ...

最新文章

  1. Swift使用通知Notification
  2. 如何使用Openfiler为VMware ESX设置一个免费的iSCSI或NAS储存系统
  3. puppet安装与配置
  4. r java_如何在R中使用JAVA写的程序包?
  5. 没错,Java 人的下半场才刚开始!
  6. python程序结构有哪几种_Python程序3种控制结构的由来
  7. HTML + CSS 实现购物商城小米(提供源码下载)
  8. Payton编程实现温度转换
  9. linux 直流电机驱动设计,嵌入式Linux直流电机驱动.PPT
  10. [基础]-requests模块使用详解
  11. 声纹识别与声源定位(一)
  12. macOS: 字体(font)文件 的 存放路径
  13. python在每个字符后加上逗号_Python将逗号添加到数字字符串中
  14. matlab程序模拟微信抢红包,js仿微信抢红包功能
  15. Elasticsearch生产实战(ik分词器、拼音分词、自动补全、自动纠错)
  16. 写大论文的一些注意事项
  17. Python Tkinter ListBox添加滚动条Scrollbar
  18. 2021年立下的Flag完成情况
  19. Linux磁盘管理 df、du、fdisk
  20. php 调用微信收货地址,php微信自动获取收货地址api用法实例详解

热门文章

  1. 兄弟打印机打印时显示服务器内部错误,打印机出现内部错误无法打印什么原因...
  2. GO语言+区块链视频教程,GO语言+区块链学习线路图(含大纲+视频+资料)
  3. html制作排班表模板,你会制作排班表吗?手把手教你用Word制作!分分钟搞定!...
  4. android版自动点击器,自动点击器安卓低配版
  5. 理正深基坑弹性计算方法_理正深基坑软件7.0/理正岩土6.5/理正勘察9.0/理正工具箱7.0...
  6. 深度强化学习——A3C
  7. 2021年下半年软件设计师考试下午题
  8. gif一键抠图 在线_不用下载的在线抠图软件哪里找?
  9. NXP单片机开发环境搭建,开发包下载
  10. ESP8266-Arduino编程实例-BME280环境传感器驱动