2024年Android自定义可移动悬浮按钮(1),2024年最新秋招现场面试

本文提供了一条Android学习资料路线,强调了系统学习的重要性,避免浅尝辄止。同时,鼓励IT从业者加入技术交流社区,以共同进步,解决面试问题和规划职业生涯。
摘要由CSDN通过智能技术生成

结尾

如何才能让我们在面试中对答如流呢?

答案当然是平时在工作或者学习中多提升自身实力的啦,那如何才能正确的学习,有方向的学习呢?为此我整理了一份Android学习资料路线:

这里是一份BAT大厂面试资料专题包:

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划。来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

| 属性 | 功能 |

| — | — |

| app:backgroundTint | 正常的背景颜色 ,这里是ColorStateList类型 |

| app:rippleColor | 按下时的背景颜色 |

| app:elevation | 正常的阴影大小 |

| app:pressedTranslationZ | 按下时的阴影大小 |

| app:layout_anchor | 设置悬浮按钮的锚点,即以哪个控件为参照设置位置 |

| app:layout_anchorGravity | 悬浮按钮相对于锚点的位置 |

| app:fabSize | 悬浮按钮的大小,normal或mini(分别对应56dp和40dp) |

| app:borderWidth | 边框大小,最好设置成0dp否则会有边框 |

| android:clickable | 一定要设置成true否则没有点击效果 |

  1. 在布局文件添加控件时可使用如下方式:

<android.support.design.widget.FloatingActionButton

/>

  1. 也可使用自定义的包名:

com.example.notepad2.DragFloatActionButton

因为接下来要实现自定义的悬浮按钮,可根据实际情况自定。这里建议使用第二种方法,使用第一种时可能会出现闪退情况

<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) {

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:

实战系列

话不多说,Android实战系列集合都已经系统分类好,由于文章篇幅问题没法过多展示


网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

hWzS4IY-1714981310535)]
[外链图片转存中…(img-qEr7kzZo-1714981310536)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值