<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[白云天的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/a896159476</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; a896159476]]></copyright><item><title><![CDATA[自定义本周日历]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/127304342</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/127304342</guid><author>a896159476</author><pubDate>Thu, 13 Oct 2022 16:43:30 +0800</pubDate><description><![CDATA[自定义本周日历]]></description><category></category></item><item><title><![CDATA[安卓自定义角标]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/126978190</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/126978190</guid><author>a896159476</author><pubDate>Wed, 21 Sep 2022 18:32:18 +0800</pubDate><description><![CDATA[之前有写过一篇自定义角标，使用起来不怎么好用，于是重新写了一个。
本次是继承AppCompatImageView，在此基础上设置Padding画角标。]]></description><category></category></item><item><title><![CDATA[Android API 30后设置系统栏]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/125338097</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/125338097</guid><author>a896159476</author><pubDate>Fri, 17 Jun 2022 17:59:38 +0800</pubDate><description><![CDATA[从Android API 30开始，setSystemUIVisibilty就不被推荐使用了，而是使用WindowInsetsController]]></description><category></category></item><item><title><![CDATA[从0开发打造视频播放器]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/125141327</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/125141327</guid><author>a896159476</author><pubDate>Mon, 06 Jun 2022 10:57:00 +0800</pubDate><description><![CDATA[从零打造视频播放器，实现视频播放、rtsp流播放、视频比例切换、全屏切换]]></description><category></category></item><item><title><![CDATA[objectbox数据库]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/122253109</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/122253109</guid><author>a896159476</author><pubDate>Fri, 31 Dec 2021 11:53:40 +0800</pubDate><description><![CDATA[一、引入

在项目build文件中


repositories {
    google()
    jcenter()
    mavenCentral()
}
dependencies {
    classpath 'com.android.tools.build:gradle:4.0.2'
    classpath "io.objectbox:objectbox-gradle-plugin:2.9.1"
}

在app的build文件中


apply plugin: 'io.objectbox]]></description><category></category></item><item><title><![CDATA[安卓折叠布局的简单使用]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/122221717</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/122221717</guid><author>a896159476</author><pubDate>Wed, 29 Dec 2021 18:15:09 +0800</pubDate><description><![CDATA[网上折叠布局的文章大多引用的官方代码，并不是那么容易看懂，这里抛砖引玉写了一个简单的折叠功能]]></description><category></category></item><item><title><![CDATA[MVVM模式快速开发]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/120322828</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/120322828</guid><author>a896159476</author><pubDate>Thu, 16 Sep 2021 10:18:18 +0800</pubDate><description><![CDATA[gitee地址：白云天/MVVMTemplate (gitee.com)

在Activity中使用

1.首先定义BaseActivity


public abstract class BaseActivity extends AppCompatActivity {

    public Context mContext;

    public abstract int getLayoutResID();

    @Override
    protected void onCreate(@Nul]]></description><category></category></item><item><title><![CDATA[Recyclerview适配器2.0（八）——多布局的滑动拖拽]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/114024934</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/114024934</guid><author>a896159476</author><pubDate>Wed, 24 Feb 2021 15:47:42 +0800</pubDate><description><![CDATA[第八篇为多布局的滑动拖拽


package com.example.recyclerview.recycler.provider.slide;

import android.util.SparseArray;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;

import com.example.recyclerview.recycler.BaseViewHolde]]></description><category></category></item><item><title><![CDATA[Recyclerview适配器2.0（七）——滑动和拖拽]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/114024777</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/114024777</guid><author>a896159476</author><pubDate>Wed, 24 Feb 2021 15:44:41 +0800</pubDate><description><![CDATA[第七篇为滑动和拖拽


package com.example.recyclerview.recycler.slide;

import android.annotation.SuppressLint;
import android.graphics.Canvas;
import android.view.MotionEvent;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.recyclervi]]></description><category></category></item><item><title><![CDATA[Recyclerview适配器2.0（六）——多条目多布局]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/113942037</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/113942037</guid><author>a896159476</author><pubDate>Mon, 22 Feb 2021 16:18:24 +0800</pubDate><description><![CDATA[第六篇为多条目的多布局


public abstract class BaseProviderMultiAdapter&lt;T&gt; extends BaseQuickAdapter&lt;T, BaseViewHolder&gt; {

    private final SparseArray&lt;BaseItemProvider&lt;T&gt;&gt; mItemProviders = new SparseArray&lt;&gt;();

    /**
     * 返回 item 类型]]></description><category></category></item><item><title><![CDATA[Recyclerview适配器2.0（五）——多布局]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/113885868</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/113885868</guid><author>a896159476</author><pubDate>Sat, 20 Feb 2021 16:18:33 +0800</pubDate><description><![CDATA[第五篇为多布局

在第一篇有部分多布局的代码


    //是否是多布局
    protected boolean isMultiItem;
    //多布局所有的id集合
    protected SparseIntArray layouts;
 
    /**
     * 单布局构造函数
     */
    public BaseQuickAdapter(@LayoutRes int layoutResId, List&lt;T&gt; data) {
        isMultiIt]]></description><category></category></item><item><title><![CDATA[Recyclerview适配器2.0（四）——基础Adapater完整代码]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/113885820</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/113885820</guid><author>a896159476</author><pubDate>Sat, 20 Feb 2021 16:13:59 +0800</pubDate><description><![CDATA[第四篇为BaseQuickAdapter的完整代码


package com.example.recyclerview.recycler;

import android.content.Context;
import android.util.SparseIntArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.L]]></description><category></category></item><item><title><![CDATA[Recyclerview适配器2.0（三）——加载更多]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/113885710</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/113885710</guid><author>a896159476</author><pubDate>Sat, 20 Feb 2021 16:12:21 +0800</pubDate><description><![CDATA[第三篇为加载更多模块的搭建

监听滑动到底部的事件


/****加载更多模块*****/
//是否开启加载更多
private boolean isOpenLoadMore = false;
public static final int FOOTER_VIEW = 0x10000333;
private LinearLayout mFooterLayout;
private boolean isLoading = false;
private View loadingView;
private View]]></description><category></category></item><item><title><![CDATA[Recyclerview适配器2.0（二）——DiffUtil差量算法]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/113885438</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/113885438</guid><author>a896159476</author><pubDate>Sat, 20 Feb 2021 16:04:59 +0800</pubDate><description><![CDATA[第二篇为DiffUtil差量算法的搭建

1.在基类adapter中重写onBindViewHolder


@Override
public void onBindViewHolder(@NonNull VH holder, int position, @NonNull List&lt;Object&gt; payloads) {
    if (payloads.isEmpty()) {
        onBindViewHolder(holder, position);
        return]]></description><category></category></item><item><title><![CDATA[Recyclerview适配器2.0（一）]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/113885128</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/113885128</guid><author>a896159476</author><pubDate>Sat, 20 Feb 2021 15:55:41 +0800</pubDate><description><![CDATA[第一篇主要内容为基本功能的搭建（item点击、长按和子View的点击、长按）


public abstract class BaseQuickAdapter&lt;T, VH extends BaseViewHolder&gt; extends RecyclerView.Adapter&lt;VH&gt; {

    protected abstract void convert(@NonNull VH holder, T item, int position);

    private Contex]]></description><category></category></item><item><title><![CDATA[ViewPager2正式版发布]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/103563387</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/103563387</guid><author>a896159476</author><pubDate>Mon, 16 Dec 2019 15:16:12 +0800</pubDate><description><![CDATA[ViewPager2正式版已经发布了，具体可以看官网文档，这里主要介绍用法

一、引入

使用ViewPager2需要导入


implementation 'androidx.viewpager2:viewpager2:1.0.0'

在xml中设置orientation, 或者在代码中设置setOrientation(),可以控制横纵向


&lt;androidx.viewpager2.wi...]]></description><category></category></item><item><title><![CDATA[BaseMVVMActivity]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/103122201</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/103122201</guid><author>a896159476</author><pubDate>Mon, 02 Dec 2019 09:23:26 +0800</pubDate><description><![CDATA[BaseMVVMActivity


import android.app.DownloadManager
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import a...]]></description><category></category></item><item><title><![CDATA[LocalBroadcastManager已被废弃]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/103235760</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/103235760</guid><author>a896159476</author><pubDate>Mon, 25 Nov 2019 12:06:31 +0800</pubDate><description><![CDATA[This class is deprecated.
LocalBroadcastManager is an application-wide event bus and embraces layer violations in your app: any component may listen events from any other. You can replace usage of LocalBroadcastManager with other implementation of observab]]></description><category></category></item><item><title><![CDATA[CameraX 概览]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/103205347</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/103205347</guid><author>a896159476</author><pubDate>Fri, 22 Nov 2019 18:14:57 +0800</pubDate><description><![CDATA[CameraX 是一个 Jetpack 支持库，旨在帮助您简化相机应用的开发工作。它提供一致且易于使用的 API 界面，适用于大多数 Android 设备，并可向后兼容至 Android 5.0（API 级别 21）。

虽然它利用的是 camera2 的功能，但使用的是更为简单且基于用例的方法，该方法具有生命周期感知能力。它还解决了设备兼容性问题，因此您无需在代码库中包含设备专属代码。这些功能减...]]></description><category></category></item><item><title><![CDATA[MVVM之DownLoadManager更新apk]]></title><link>https://blog.youkuaiyun.com/a896159476/article/details/103162982</link><guid>https://blog.youkuaiyun.com/a896159476/article/details/103162982</guid><author>a896159476</author><pubDate>Wed, 20 Nov 2019 14:57:53 +0800</pubDate><description><![CDATA[基类代码

BaseMVVMActivity

在ViewModel中使用协程需要引入


//viewModel协程
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-rc02'

在ViewModel调用版本更新检测的方法


class MainViewModel : ViewModel() {

    val...]]></description><category></category></item></channel></rss>