android+浮层布局,如何使用Android实现单页面浮层可拖动view
如何使用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相关推荐
- android子view获取父布局,Android获取布局父ID(Android get layout parent id)
Android获取布局父ID(Android get layout parent id) 我想知道View和ViewParent有什么区别? 我想获取ImageView父级的Id,但我不能这样做: m ...
- Android延伸布局到状态栏,Android 状态栏透明
前言:最近项目大量用到状态栏透明,网上也出现很多库可以直接拿来用,个人认为没有必要那么重引用到一个库(有木有同学和我有一样的想法),所以研究了一番,在此做个记录加强记忆也便后期查阅,如果无意中有幸能帮 ...
- android 3d布局轮播,android 图片/视频混合轮播控件banner
android 图片/视频混合轮播控件banner 在youth5201314的图片轮播控件做的修改 原作者github地址:https://github.com/youth5201314/banne ...
- android 微信布局 字体,【Android】底部Tab+ViewPager(仿微信界面)
感谢 github的作者:wuyexiong 效果图(图片和文字都有渐变效果) 实现 主要用到自定义一个LinearLayout和ImageView 1.BottomIconView继承自ImageV ...
- android五大布局的作用,Android五大布局与实际应用详解
Android总体有五大布局: 线性布局(LiearLayout): 屏幕垂直或水平方向布局. 帧布局(FrameLayout):控件从屏幕左上角开始布局. 相对布局(RelativeLayout): ...
- android layout布局 有哪些,Android 常用布局 介绍与使用
读前思考 学习一门技术或者看一篇文章最好的方式就是带着问题去学习,这样才能在过程中有茅塞顿开.灯火阑珊的感觉,记忆也会更深刻. 有哪些常用的布局? 每一种布局有何特点与不同? 布局上如何优化? 1. ...
- android线性布局控制间隙,Android线性布局(Linear Layout)
Android 中常用布局 [1] 线性布局 [2] 相对布局 [3] 帧布局 -- FrameLayout [4] 表格布局 -- !!!一个 tabrow 就代表一行 [5] 绝对布局 -- ...
- android spinner布局,重拾Android之路之Spinner
引言 最近做的项目想仿做滴滴出行首页的悬浮框. 正文 效果参考滴滴出行; 工欲善其事,必先利其器!来...... Spinner详解 Spinner控件初始化时,会调用它的选择监听事件,默认选择第一个 ...
- android动态布局实例教程,Android 动态解析布局,实现制作多套主题
问题背景: 之前做过一个项目(随心壁纸),主要展示过去每期的壁纸主题以及相应的壁纸,而且策划要求,最好可以动态变换主题呈现方式,这样用户体验会比较好.嗯,好吧,策划的话,咱们也没法反驳,毕竟这样搞,确 ...
- android五大布局的用法,android:stretchColumns用法
TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但实际上,会经常在代码里使用TableLayout,例如做出表格的效果.本文主要介绍TableLayout的基本使用 ...
最新文章
- Swift使用通知Notification
- 如何使用Openfiler为VMware ESX设置一个免费的iSCSI或NAS储存系统
- puppet安装与配置
- r java_如何在R中使用JAVA写的程序包?
- 没错,Java 人的下半场才刚开始!
- python程序结构有哪几种_Python程序3种控制结构的由来
- HTML + CSS 实现购物商城小米(提供源码下载)
- Payton编程实现温度转换
- linux 直流电机驱动设计,嵌入式Linux直流电机驱动.PPT
- [基础]-requests模块使用详解
- 声纹识别与声源定位(一)
- macOS: 字体(font)文件 的 存放路径
- python在每个字符后加上逗号_Python将逗号添加到数字字符串中
- matlab程序模拟微信抢红包,js仿微信抢红包功能
- Elasticsearch生产实战(ik分词器、拼音分词、自动补全、自动纠错)
- 写大论文的一些注意事项
- Python Tkinter ListBox添加滚动条Scrollbar
- 2021年立下的Flag完成情况
- Linux磁盘管理 df、du、fdisk
- php 调用微信收货地址,php微信自动获取收货地址api用法实例详解
热门文章
- 兄弟打印机打印时显示服务器内部错误,打印机出现内部错误无法打印什么原因...
- GO语言+区块链视频教程,GO语言+区块链学习线路图(含大纲+视频+资料)
- html制作排班表模板,你会制作排班表吗?手把手教你用Word制作!分分钟搞定!...
- android版自动点击器,自动点击器安卓低配版
- 理正深基坑弹性计算方法_理正深基坑软件7.0/理正岩土6.5/理正勘察9.0/理正工具箱7.0...
- 深度强化学习——A3C
- 2021年下半年软件设计师考试下午题
- gif一键抠图 在线_不用下载的在线抠图软件哪里找?
- NXP单片机开发环境搭建,开发包下载
- ESP8266-Arduino编程实例-BME280环境传感器驱动