Android 自定义悬浮小球

这篇博客介绍了如何在Android中实现类似网易星球和支付宝收能量的自定义浮动小球视图。通过继承RelativeLayout,定义属性,设置初始数据,应用随机位置和动画效果,实现了小球的显示、点击交互及防止重叠的功能。文章提供了完整代码示例,并指出了获取屏幕宽高的优化方法。
摘要由CSDN通过智能技术生成

第一次自己自定义控件,看了别人的控件,自己模仿出来一个新的,这是精简版,拓展性很差,文章最后将完全版代码附上

效果和支付宝收能量,网易星球首页钻石一样

先上效果图

1.继承 Relativelayout

public MyView(Context context)
public MyView(Context context, AttributeSet attrs)

2.在attrs中,定义属性

<declare-styleable name="MyView">
    <attr name="cicleWidth" format="dimension" />
    <attr name="myViewWidth" format="dimension" />
    <attr name="myViewHeight" format="dimension" />
</declare-styleable>

3.在xml中,要加xmlns:app="http://schemas.android.com/apk/res-auto"

<com.luo.hellocustom.MyView
    android:id="@+id/myView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:cicleWidth="35dp"
    />

4.代码中,拿到属性值

TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.MyView);
parentWidth = typedArray.getDimension(R.styleable.MyView_myViewWidth, getScrWidth());
parentHeight = typedArray.getDimension(R.styleable.MyView_myViewHeight, getScrHeight());

拿到控件宽度,getScrWidth()是我们自己默认设置的值

5.给控件添加小球

写一个方法setList();在Activity中直接调用,等于初始化数据

//设置数据添加子小球
public void setList(List<? extends Number> list) {
    this.mFloat = list;
    //使用post方法确保在UI加载完的情况下 调用init() 避免获取到的宽高为0
    post(new Runnable() {
        @Override
        public void run() {
            init();
        }
    });
}

使用post是为了可以拿到宽高,否则为0,在post之前就需要

view = LayoutInflater.from(mContext).inflate(R.layout.view_float, this, false);

否则也拿不到值

6.小球的出现使用随机数,生成xy

Random randomX = new Random();
Random randomY = new Random();
float x = randomX.nextFloat() * (parentWidth - view.getWidth()/2);
float y = randomY.nextFloat() * (parentHeight - view.getWidth()/2);
view.setX(x);
view.setY(y);

取值在,父控件的宽度减小球半径

7,动画,小球出现时动画(渐变)

view.setAlpha(0);
view.setScaleX(0);
view.setScaleY(0);
view.animate().alpha(1).scaleX(1).scaleY(1).setDuration(2000).start();

8.小球的点击事件,我们可以加个回调

public s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值