波形自定义控件(一):效果展示与使用方法

本文详细介绍了一款名为WaveLoadingView的波形加载控件,包括其基本使用、参数配置及高级用法。该控件提供了丰富的动画效果,如文本、图形及自定义图像,并支持幻影效果和波控制器定制。

耗时一天,终于做出了一个波形加载控件,来看看效果吧。

效果展示

在这里插入图片描述

基本使用

首先导入这个控件。

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
dependencies {
    ...
    implementation 'com.github.PYJTLK:WaveLoadingView:1.0' 
}

在布局文件上放置一个WaveLoadingView,设置相关的参数。这里以上图红色的长方形风格为例。

<com.pyjtlk.waveloadingview.WaveLoadingView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:imageWaveType="rect"
        app:imageSize="20dp"
        app:color="#AA00"
        app:interval="1dp"
        app:waveHeight="slight"
        app:waveLength="5"
        app:length="10"
        app:rectRadius="8dp"
        app:ghostEffect="true"
        app:ghostAlphaMax="255"
        app:ghostAlphaMin="100"/>

接着在Activity绑定即可。

private WaveLoadingView waveLoadingView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    waveLoadingView = findViewById(R.id.loadView);
}

参数列表

参数说明
text文本内容
textSize文本大小
length总长度,设置了text参数时失效
waveLength波长
waveHeight波的高度,枚举变量,枚举值:slight,normal,big,large
imageWaveType波的类型,设置了text参数时失效,枚举值:circle,square,rect,noise
color文本或图形的颜色
customImage自定义图像
duration动画效果的时间,单位:ms
interval图形的间隔距离
imageSize图形的大小,注意图形的长宽都会使用这个尺寸
rectRadius圆角的半径
ghostEffect是否使用幻影效果
ghostAlphaMax幻影效果透明度上限
ghostAlphaMax幻影效果透明度下限

控件的参数有点多,其实总的来说可以分为三大类型。文本型(刚刚展示紫色的那个),图像型(绿、蓝、红、天蓝那四个)及自定义型(星星)。

优先级:自定义型>文本型>图像型
举个例子,如果设置了customImage,那么text 和textSize就失效了。

方法列表

常用的方法如下

方法说明
start启动动画
pause暂停动画
setDuration设置波移动时间
setColor设置颜色
setWaveLength设置波长
setInterval设置图形或字符间隔
setType设置图形类型
setGhostEffect使用幻影效果
setGhostAlpha设置幻影效果Alpha上下限
setWaveDrawable设置自定义图像

高级用法

从刚刚的展示效果可以看出,WaveLoadingView的波默认下是从左往右的。如果想自定义波的移动方式可以设置一个波控制器,如下实现了一个左右来回运动的效果。

waveLoadingView.setWaveControler(new WaveLoadingView.WaveControler() {
            int i = 0;

            @Override
            public int onRefresh(int currentPostion, int start, int end) {
                if(i == 0){
                    if(currentPostion + 1 > end){
                        i = 1;
                        return currentPostion - 1;
                    }else{
                        return currentPostion + 1;
                    }
                }

                if(i == 1){
                    if(currentPostion - 1 < start){
                        i = 0;
                        return currentPostion + 1;
                    }else{
                        return currentPostion - 1;
                    }
                }

                return 0;
            }
        });

效果如下。
在这里插入图片描述

最后

项目Github地址:https://github.com/PYJTLK/WaveLoadingView
由于此控件用的是androidx库,项目使用android.support库的朋友可以把它下载下来自行修改。如果喜欢这个控件的话,可以点个star支持一下。

下一篇

后续几篇将讲解WaveLoadingView的实现原理,其中下一篇讲解自定义控件的初始化流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值