Android 自定义开源库 EasyView

简介: Android 自定义开源库 EasyView

EasyView


  这是一个简单方便的Android自定义View库,我一直有一个想法弄一个开源库,现在这个想法付诸实现了,如果有什么需要自定义的View可以提出来,不一定都会采纳,合理的会采纳,时间周期不保证,咱要量力而行呀,踏实一点。


配置EasyView


1. 工程build.gradle 或 settings.gradle配置

   代码已经推送到MavenCentral(),在Android Studio 4.2以后的版本中默认在创建工程的时候使用MavenCentral(),而不是jcenter()

   如果是之前的版本则需要在repositories{}闭包中添加mavenCentral(),不同的是,老版本的Android Studio是在工程的build.gradle中添加,而新版本是工程的settings.gradle中添加,如果已经添加,则不要重复添加。

repositories {
    ...
    mavenCentral()
}


2. 使用模块的build.gradle配置

   例如在app模块中使用,则打开app模块下的build.gradle,在dependencies{}闭包下添加即可,之后记得要Sync Now

dependencies {
    implementation 'io.github.lilongweidev:easyview:1.0.5'
}


使用EasyView


这是一个自定义View的库,会慢慢丰富里面的自定义View,我先画个饼再说,源码地址:EasyView


一、MacAddressEditText


MacAddressEditText是一个蓝牙Mac地址输入控件,点击之后出现一个定制的Hex键盘,用于输入值。

d6315a00e7b94b3db08faf82ebfed487.gif


1. xml中使用

首先是在xml中添加如下代码,具体参考app模块中的activity_mac_address.xml

    <com.easy.view.MacAddressEditText
        android:id="@+id/mac_et"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:boxBackgroundColor="@color/white"
        app:boxStrokeColor="@color/black"
        app:boxStrokeWidth="2dp"
        app:boxWidth="48dp"
        app:separator=":"
        app:textColor="@color/black"
        app:textSize="14sp" />


2. 属性介绍

这里使用了MacAddressEditText的所有属性,可以自行进行设置,使用说明参考下表。

属性 说明
app:boxBackgroundColor 设置输入框的背景颜色
app:boxStrokeColor 设置输入框的边框颜色
app:boxStrokeWidth 设置输入框的边框大小
app:boxWidth 设置输入框大小
app:separator Mac地址的分隔符,例如分号:
app:textColor 设置输入框文字颜色
app:textSize 设置输入框文字大小


3. 代码中使用

    MacAddressEditText macEt = findViewById(R.id.mac_et);
    String macAddress = macEt.getMacAddress();


macAddress可能会是空字符串,使用之前请判断一下,参考app模块中的MacAddressActivity中的使用方式。


二、CircularProgressBar


CircularProgressBar是圆环进度条控件。

7c6fc6afe2714f6ca9cf49619d8670ce.gif


1. xml中使用

首先是在xml中添加如下代码,具体参考app模块中的activity_progress_bar.xml

    <com.easy.view.CircularProgressBar
        android:id="@+id/cpb_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        app:maxProgress="100"
        app:progress="10"
        app:progressbarBackgroundColor="@color/purple_500"
        app:progressbarColor="@color/purple_200"
        app:radius="80dp"
        app:strokeWidth="16dp"
        app:text="10%"
        app:textColor="@color/teal_200"
        app:textSize="28sp" />


2. 属性介绍

这里使用了MacAddressEditText的所有属性,可以自行进行设置,使用说明参考下表。

属性 说明
app:maxProgress 最大进度
app:progress 当前进度
app:progressbarBackgroundColor 进度条背景颜色
app:progressbarColor 进度颜色
app:radius 半径,用于设置圆环的大小
app:strokeWidth 进度条大小
app:text 进度条中心文字
app:textColor 进度条中心文字颜色
app:textSize 进度条中心文字大小


3. 代码中使用

    CircularProgressBar cpbTest = findViewById(R.id.cpb_test);
    int progress = 10;
    cpbTest.setText(progress + "%");
    cpbTest.setProgress(progress);


参考app模块中的ProgressBarActivity中的使用方式。


三、TimingTextView


TimingTextView是计时文字控件。

ddeba3ca24934ff78606c0330540558a.gif


1. xml中使用

首先是在xml中添加如下代码,具体参考app模块中的activity_timing_text.xml

    <com.easy.view.TimingTextView
        android:id="@+id/tv_timing"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:text="计时文字"
        android:textColor="@color/black"
        android:textSize="32sp"
        app:countdown="false"
        app:max="60"
        app:unit="s" />


2. 属性介绍

这里使用了TimingTextView自定义属性不多,只有3个,TextView的属性就不列举说明,使用说明参考下表。

属性 说明
app:countdown 是否倒计时
app:max 最大时间长度
app:unit 时间单位:s(秒)、m(分)、h(时)


3. 代码中使用

    TimingTextView tvTiming = findViewById(R.id.tv_timing);
    tvTiming.setMax(6);//最大时间
    tvTiming.setCountDown(false);//是否倒计时
    tvTiming.setUnit(3);//单位 秒
    tvTiming.setListener(new TimingListener() {
        @Override
        public void onEnd() {
            //定时结束
        }
    });
    //开始计时
    tvTiming.start();
    //停止计时
    //tvTiming.end();


参考app模块中的TimingActivity中的使用方式。


四、EasyEditText


EasyEditText是一个简易输入控件,可用于密码框、验证码输入框进行使用,效果图如下所示:

20032431b8bb419bb01b89d9b4be0566.gif

1. xml中使用

首先是在xml中添加如下代码,具体参考app模块中的activity_easy_edittext.xml

    <com.easy.view.EasyEditText
        android:id="@+id/et_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:boxBackgroundColor="@color/white"
        app:boxFocusStrokeColor="@color/green"
        app:boxNum="6"
        app:boxStrokeColor="@color/black"
        app:boxStrokeWidth="2dp"
        app:boxWidth="48dp"
        app:ciphertext="false"
        app:textColor="@color/black"
        app:textSize="16sp" />


2. 属性介绍

这里使用了EasyEditText的所有属性,可以自行进行设置,使用说明参考下表。

属性 说明
app:boxBackgroundColor 设置输入框的背景颜色
app:boxFocusStrokeColor 设置输入框获取焦点时的颜色
app:boxNum 设置输入框的个数,4~6个
app:boxStrokeColor 设置输入框的边框颜色
app:boxStrokeWidth 设置输入框的边框大小
app:boxWidth 设置输入框大小
app:ciphertext 是否密文,用于密码框
app:textColor 设置输入框文字颜色
app:textSize 设置输入框文字大小


3. 代码中使用

        binding.cbFlag.setOnCheckedChangeListener((buttonView, isChecked) -> {
        binding.etContent.setCiphertext(isChecked);
        binding.cbFlag.setText(isChecked ? "密文" : "明文");
        });
        //输入框
        binding.btnGetContent.setOnClickListener(v -> {
        String content = binding.etContent.getText();
        if (content.isEmpty()) {
        showMsg("请输入内容");
        return;
        }
        if (content.length() < binding.etContent.getBoxNum()) {
        showMsg("请输入完整内容");
        return;
        }
        showMsg("输入内容为:" + content);
        });


参考app模块中的EasyEditTextActivity中的使用方式。


五、PieProgressBar


PieProgressBar是一个饼状进度条。

image.gif


1. xml中使用

首先是在xml中添加如下代码,具体参考app模块中的activity_pie_progress_bar.xml

    <com.easy.view.PieProgressBar
        android:id="@+id/progress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:customAngle="right"
        app:gradient="false"
        app:gradientColorArray="@array/color"
        app:maxProgress="100"
        app:progress="5"
        app:progressbarColor="@color/green"
        app:radius="80dp" />


2. 属性介绍

这里使用了PieProgressBar的所有属性,可以自行进行设置,使用说明参考下表。

属性 说明
app:maxProgress 最大进度
app:progress 当前进度
app:progressbarColor 进度颜色
app:radius 半径,用于设置圆环的大小
app:strokeWidth 描边大小
app:gradient 是否开启进度颜色渐变
app:gradientColorArray 渐变颜色数组
app:customAngle 开始角度,可设置:right、bottom、left、top


3. 代码中使用

        //设置渐变
        binding.progress.setGradient(isChecked);
        //设置开始角度  
        binding.progress.setCustomAngle(angle);
        //设置进度
        binding.progress.setProgress(0);


参考app模块中的PieProgressBarActivity中的使用方式。


六、EasyDialog


EasyDialog是一个简易弹窗,你可以选择自定义xml使用或者快捷使用两种方式。

55cb0db4099b42dab15e280fa86fb6e4.gif

image.gif


1. 自定义XML使用

在layout下创建一个dialog_warm_tip.xml,作为弹窗的布局,代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="300dp"
    android:layout_height="wrap_content"
    android:background="@drawable/shape_dialog_bg">
    <TextView
        android:id="@+id/tv_title"
        android:layout_width="0dp"
        android:layout_height="?attr/actionBarSize"
        android:gravity="center"
        android:text="弹窗标题"
        android:textColor="@color/black"
        android:textSize="16sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <View
        android:id="@+id/view"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/line"
        app:layout_constraintTop_toBottomOf="@+id/tv_title" />
    <TextView
        android:id="@+id/tv_content"
        android:layout_width="0dp"
        android:layout_height="?attr/actionBarSize"
        android:gravity="center"
        android:text="你想要写什么内容呢?"
        android:textColor="@color/black"
        android:textSize="14sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/view" />
    <View
        android:id="@+id/view_1"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/line"
        app:layout_constraintTop_toBottomOf="@+id/tv_content" />
    <TextView
        android:id="@+id/tv_cancel"
        android:layout_width="0dp"
        android:layout_height="?attr/actionBarSize"
        android:gravity="center"
        android:text="取消"
        android:textColor="@color/black"
        android:textSize="14sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/view_2"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/view_1" />
    <View
        android:id="@+id/view_2"
        android:layout_width="1dp"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/line"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/tv_confirm"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/tv_cancel"
        app:layout_constraintTop_toBottomOf="@+id/view_1" />
    <TextView
        android:id="@+id/tv_confirm"
        android:layout_width="0dp"
        android:layout_height="?attr/actionBarSize"
        android:gravity="center"
        android:text="确定"
        android:textColor="@color/black"
        android:textSize="14sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/view_2"
        app:layout_constraintTop_toBottomOf="@+id/view_1" />
</androidx.constraintlayout.widget.ConstraintLayout>


使用示例代码如下所示:

private EasyDialog easyDialog;
private void showDialog() {
        EasyDialog.Builder builder = new EasyDialog.Builder(EasyDialogActivity.this)
        .setContentView(R.layout.dialog_warm_tip)
        //添加自定义动画
        .addCustomAnimation(Gravity.CENTER, true)
        //设置对话框可取消
        .setCancelable(true)
        //设置标题
        .setText(R.id.tv_title, "温馨提示")
        //设置内容
        .setText(R.id.tv_content, "您今天还没有搞钱,请记得搞钱!")
        //设置文字颜色
        .setTextColor(R.id.tv_confirm, ContextCompat.getColor(EasyDialogActivity.this, R.color.white))
        //设置背景资源
        .setBackground(R.id.tv_confirm, ContextCompat.getDrawable(EasyDialogActivity.this, R.drawable.shape_confirm_bg))
        //设置弹窗宽高
        .setWidthAndHeight(EasyUtils.dp2px(EasyDialogActivity.this, 320), LinearLayout.LayoutParams.WRAP_CONTENT)
        //添加点击事件  取消
        .setOnClickListener(R.id.tv_cancel, v1 -> {
            easyDialog.dismiss();
        })
        //添加点击事件  确定
        .setOnClickListener(R.id.tv_confirm, v2 -> {
            showMsg("我知道了!");
            easyDialog.dismiss();
        })
        //添加取消监听
        .setOnCancelListener(dialog -> {
            showMsg("弹窗取消了");
        })
        //弹窗消失监听
        .setOnDismissListener(dialog -> {
            showMsg("弹窗消失了");
        });
        //创建弹窗
        easyDialog = builder.create();
        //显示弹窗
        easyDialog.show();
}


2. 快捷使用

内置了一些XML和功能弹窗,一行代码调用即可,简单方便。

显示提示弹窗:

EasyDialogUtils.showTipDialog(EasyDialogActivity.this, "温馨提示", "端午又要调休!",
                        () -> showMsg("取消"), () -> showMsg("确定"));


显示选择弹窗:

final String[] stringArr = {"富强", "民主", "文明", "和谐", "自由", "平等", "公正", "法治", "爱国", "敬业", "诚信", "友善"};
List<String> stringList = new ArrayList<>(Arrays.asList(stringArr));
EasyDialogUtils.showSelectDialog(EasyDialogActivity.this, "社会主义核心价值观",
        stringList, this::showMsg);


参考app模块中的EasyDialogActivity中的使用方式。

相关文章
|
1月前
|
Android开发 开发者
安卓应用开发中的自定义视图
【9月更文挑战第37天】在安卓开发的海洋中,自定义视图犹如一座座小岛,等待着勇敢的探索者去发现其独特之处。本文将带领你踏上这段旅程,从浅滩走向深海,逐步揭开自定义视图的神秘面纱。
32 3
|
24天前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
56 0
|
3月前
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
64 2
基于Android P,自定义Android开机动画的方法
|
3月前
|
供应链 物联网 区块链
未来触手可及:探索新兴技术的趋势与应用安卓开发中的自定义视图:从基础到进阶
【8月更文挑战第30天】随着科技的飞速发展,新兴技术如区块链、物联网和虚拟现实正在重塑我们的世界。本文将深入探讨这些技术的发展趋势和应用场景,带你领略未来的可能性。
|
3月前
|
测试技术 Android开发 Python
探索软件测试的艺术:从基础到高级安卓应用开发中的自定义视图
【8月更文挑战第29天】在软件开发的世界中,测试是不可或缺的一环。它如同艺术一般,需要精细的技巧和深厚的知识。本文旨在通过浅显易懂的语言,引领读者从软件测试的基础出发,逐步深入到更复杂的测试策略和工具的使用,最终达到能够独立进行高效测试的水平。我们将一起探索如何通过不同的测试方法来确保软件的质量和性能,就像艺术家通过不同的色彩和笔触来完成一幅画作一样。
|
1天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
11 5
|
12天前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
15 1
|
16天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
63 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
24天前
|
XML 前端开发 Java
安卓应用开发中的自定义View组件
【10月更文挑战第5天】自定义View是安卓应用开发的一块基石,它为开发者提供了无限的可能。通过掌握其原理和实现方法,可以创造出既美观又实用的用户界面。本文将引导你了解自定义View的创建过程,包括绘制技巧、事件处理以及性能优化等关键步骤。
|
28天前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a