我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛

前言

2023年到来,今年过年分外早,没几天就要迎新年了,由于是兔年,所以我创立了一个Rabbit为主题的App,里面以兔子为主题而增加各种相关内容,现在仅有十条2023兔年祝福语,后边会增加其他功能,下面,咱们看看这个App的样子。

正篇

UI设计

首先,这个App由于这两天才创立的,所以仅仅UI上看起来和兔子相关,内容并不是很充实。主要是找了一张兔子的图片做App的logo,以及找了几张动态图作为app内部的装修UI,如下:

新年兔兔送祝福——SearchRabbit(安卓app)

新年兔兔送祝福——SearchRabbit(安卓app)

勉强符合此次“兔了个兔”的主题。

内容设计

内部我是利用LottieAnimation去展示动图(让UI繁忙的安卓Lottie动画烘托库(一) – () & 让UI繁忙的安卓Lottie动画烘托库(二) – ()),然后运用之前掘友引荐的刘强东写的列表神器BRV(liangjingkanji/BRV: [文档详细] Android上最好的RecyclerView框架, 比 BRVAH 更简略强大 (github.com)),琢磨了半响最终仍是没有成功运用库作者引荐的DataBinding方法,我运用RecyclerView中运用BRV去加载10条祝福语。

这是运用作者引荐方法后运转不起来的截图:

新年兔兔送祝福——SearchRabbit(安卓app)
看文档上的解决方法顺次测验仍是没成功,所以仍是采用ViewBinding的方法了。

代码与效果展示

部分XML布局如下,我尽管启用了DataBinding但现在还不会用,所以我也同时启用了ViewBinding:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
    <data>
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">
       ...
       ...
        <com.airbnb.lottie.LottieAnimationView
            android:id="@+id/rabbit_easter_egg_slider"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:layout_gravity="center"
            app:lottie_autoPlay="true"
            app:lottie_fileName="lottie/rabbit_easter_egg_slider.json"
            app:lottie_loop="true"
            app:lottie_repeatMode="restart" />
        <androidx.core.widget.NestedScrollView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            tools:ignore="SpeakableTextPresentCheck">
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">
            ...
            ...
                <com.airbnb.lottie.LottieAnimationView
                    android:id="@+id/rabbit_2023"
                    android:layout_width="200dp"
                    android:layout_height="200dp"
                    android:layout_gravity="center"
                    app:lottie_autoPlay="true"
                    app:lottie_fileName="lottie/rabbit_2023.json"
                    app:lottie_loop="true"
                    app:lottie_repeatMode="restart" />
            </LinearLayout>
        </androidx.core.widget.NestedScrollView>
        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/vMainList"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </androidx.recyclerview.widget.RecyclerView>
    </LinearLayout>
</layout>

我的activity中部分代码如下,很笨拙地运用列表的方法存了10条祝福语,后边还会优化一下并加上复制按钮

...
...
class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    private var text = arrayOf("兔年!...",
    ...
    ....,
    ....,
    ....")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        window.attributes.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN
        binding.vMainList.linear().setup {
            addType<SimpleModel>(R.layout.item_simple)
            setAnimation(AnimationType.SLIDE_BOTTOM)
            onBind {
                val binding = getBinding<ItemSimpleBinding>() // 运用ViewBinding/DataBinding都能够运用本方法
                binding.tvName.text = getModel<SimpleModel>().name
            }
        }.models = getData()
    }
    private fun getData(): MutableList<Any> {
        // 在Model中也能够绑定数据
        return mutableListOf<Any>().apply {
            for (i in 1..10) {
                val simpleModel = SimpleModel(
                    "$i、${text[i-1]}"
                    , i)
                add(simpleModel)
//            add(SimpleModel())
            }
        }
    }
}

运转后现在只能够滑动查看列表:

项目代码

总之就是这个App现在还十分简陋,但是现已放到了GitHub上了,后续会逐渐增加优化一些功能和代码。

项目地址:ObliviateOnline/RabbitApp: 2023 rabbit app (github.com)

总结

原本是想做一个搜索类的App,成果发现做着做着就偏离了方向,但是原本就是为了新年添个彩头,又是自己弄着玩的,加之看起来仍是像那么回事,所以就这么直接发出来献丑了,希望大家喜爱!