Android自定义可移动悬浮按钮
<com.example.notepad2.DragFloatActionButton
android:id=“@+id/fb”
android:layout_height=“wrap_content”
android:layout_width=“wrap_content”
app:borderWidth=“0dp”
app:backgroundTint=“#FFFFFF”
app:rippleColor=“#008577”
android:src=“@drawable/hao”
android:layout_alignParentRight=“true”
android:layout_centerVertical=“true”
/>
[](()实现自定义悬浮按钮
创建一个_DragFloatActionButton_类继承_FloatingActionButton_
在类中覆写 onTouchEvent 函数,捕捉触摸事件,然后利用_setX()_,setY() 方法将其移动。
而吸附效果,则是利用_ObjectAnimator.ofFloat_ 实现动画。
//左吸附
ObjectAnimator oa=ObjectAnimator.ofFloat(this,“x”,getX(),0);
oa.setInterpolator(new DecelerateInterpolator());
oa.setDuration(500);
oa.start();
使用的构造方法为
public static ObjectAnimator ofFloat(Object target, String propertyName, float… values)
第一个参数为添加动画的对象
第二个参数为动画属性名称,这里我们使用alpha透明度动画
第三个参数为要改变的值,是可变的,这里我们从1变为0再变为1,也就是从不透明变成透明,然后变回来。
以下是 DragFloatActionButton 类的实现代码:
public class DragFloatActionButton extends FloatingActionButton {
private int parentHeight;
private int parentWidth;
public DragFloatActionButton(Context context) 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 {
super(context);
}
public DragFloatActionButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DragFloatActionButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private int lastX;
private int lastY;
private boolean isDrag;
@Override
public boolean onTouchEvent(MotionEvent event) {
int rawX = (int) event.getRawX();
int rawY = (int) event.getRawY();
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
setPressed(true);
isDrag=false;
getParent().requestDisallowInterceptTouchEvent(true);
lastX=rawX;
lastY=rawY;
ViewGroup parent;
if(getParent()!=null){
parent= (ViewGroup) getParent();
parentHeight=parent.getHeight();
parentWidth=parent.getWidth();
}
break;
case MotionEvent.ACTION_MOVE:
if(parentHeight<=0||parentWidth==0){
isDrag=false;
break;
}else {
isDrag=true;
}
//计算手指移动了多少
int dx=rawX-lastX;
int dy=rawY-lastY;
//这里修复一些华为手机无法触发点击事件
int distance= (int) Math.sqrt(dxdx+dydy);
if(distance==0){
isDrag=false;
break;
}
float x=getX()+dx;
float y=getY()+dy;
//检测是否到达边缘 左上右下
x=x<0?0:x>parentWidth-getWidth()?parentWidth-getWidth():x;
y=getY()<0?0:getY()+getHeight()>parentHeight?parentHeight-getHeight():y;
setX(x);
setY(y);
lastX=rawX;
lastY=rawY;
Log.i(“aa”,“isDrag=”+isDrag+“getX=”+getX()+“;getY=”+getY()+“;parentWidth=”+parentWidth);
break;
case MotionEvent.ACTION_UP:
if(!isNotDrag()){
//恢复按压效果
setPressed(false);
//Log.i(“getX=”+getX()+“;screenWidthHalf=”+screenWidthHalf);
/* animate().setInterpolator(new DecelerateInterpolator())
.setDuration(500)
.start();*/
if(rawX>=parentWidth/2){
//靠右吸附
animate().setInterpolator(new DecelerateInterpolator())
.setDuration(500)
.xBy(parentWidth-getWidth()-getX())
.start();
}else {
//靠左吸附
ObjectAnimator oa=ObjectAnimator.ofFloat(this,“x”,getX(),0);
oa.setInterpolator(new DecelerateInterpolator());
oa.setDuration(500);
oa.start();
}
}
break;
}
//如果是拖拽则消s耗事件,否则正常传递即可。
return !isNotDrag() || super.onTouchEvent(event);
Android自定义可移动悬浮按钮相关推荐
- Android自定义可移动悬浮按钮,附大厂真题面经
android:layout_width="wrap_content" app:borderWidth="0dp" app:backgroundTint=&qu ...
- 直播商城开发Android自定义可移动悬浮按钮
在布局文件添加控件时可使用如下方式: <android.support.design.widget.FloatingActionButton......./> 也可使用自定义的包名: co ...
- android布局黑色字体颜色,Android开发之FloatingActionButton悬浮按钮基本使用、字体、颜色用法示例...
本文实例讲述了Android开发之FloatingActionButton悬浮按钮基本使用.字体.颜色用法.分享给大家供大家参考,具体如下: 这里主要讲: FloatingActionsMenu自定义 ...
- Android自定义View-滑动解锁按钮
Android自定义View-滑动解锁按钮 写在前面 一.实现的思路 二.先上成品图 三.自定义属性 四.使用 五.具体实现 写在前面 最近由于项目需求,需要有一个类似苹果的滑动解锁控件,抱着万事不求 ...
- android设置自定义按钮,Android自定义View之元素按钮
Android自定义View之元素按钮 之前在dribbble看到的三个元素的按钮,参考了设计的创意,添加了自己定义的动画效果来实现.先看效果 效果图 分别是水火电三个元素的按钮实现.其中电的实现最简 ...
- android悬浮功能实现,Android实现系统级悬浮按钮
本文实例为大家分享了Android系统级悬浮按钮的具体代码,供大家参考,具体内容如下 具体的需求 1.就是做一个系统级的悬浮按钮,就像iPhone 桌面的那个悬浮按钮效果一样,能随意拖动,并且手一放开 ...
- Android 可拖拽悬浮按钮
转自http://www.jianshu.com/p/ba3e5fc5cff1 实现思路 通过重写控件的onTouchEvent方法监听触摸效果. 通过View的setX()和setY()方法实现移动 ...
- Android自定义弹窗——右上角悬浮关闭
今天打开QQ音乐时,看到更新界面右上角悬浮关闭按钮,本来想应该挺简单的,于是就想顺手写一个,但是不试不知道,一试就出问题咯. 于是在原有自己封装的dialog中进行修改,原有样式 本来以为只要加个ma ...
- android自定义adapter(实现对按钮的监听)
我们一般需要自定义adapter 这里就需要继承BaseAdapter adapter在MVC开发模式中,是控制层 baseAdapter 继承这个方法必须重写 四个方法 1. getcont ...
最新文章
- 求求你,不要再使用!=null判空了!
- 【bzoj1565】[NOI2009]植物大战僵尸 拓扑排序+最大权闭合图
- Python中的range和xrange区别
- 栈(stack)和堆(heap)
- 如何把html转换成音频网址,怎么把视频转换成音频 视频转换成mp3
- Linux crypto相关知识的汇总 Linux加密框架crypto对称算法和哈希算法加密模式
- nginx的源码编译及相关文件配置
- mssql sqlserver 使用sql脚本检测数据表中一列数据是否连续的方法分享
- weblogic系列漏洞整理 -- 1. weblogic安装
- 跟着鬼哥学爬虫-2-糗事百科
- iNet Network Scanner Mac(网络扫描工具)
- Codeforces1538G Gift Set (三分)
- 多目标灰太狼算法求解环境经济调度问题(IEEE30)(Matlab实现)
- 网名接龙--之追求完美
- 阿里云服务器试用一哈
- 提示用户输入一个高考_高考报名用户名密码显示错误怎么办
- 30个不可不知的容器技术工具和资源
- spring中的JdbcTemplate的使用方法
- 文件夹下的图片名字进行重命名--批量操作
- 微信小程序海报分享及好友分享