<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lbj23vs6的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lbj23vs6</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lbj23vs6]]></copyright><item><title><![CDATA[关于Databinding相关 XXX.inflate(layoutInflater) must not be null问题]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/129442745</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/129442745</guid><author>lbj23vs6</author><pubDate>Fri, 10 Mar 2023 15:00:23 +0800</pubDate><description><![CDATA[如com.abc.login->com.xyz.login，请进行如下步骤。]]></description><category></category></item><item><title><![CDATA[gRPC&protocol buffers]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/124276864</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/124276864</guid><author>lbj23vs6</author><pubDate>Tue, 19 Apr 2022 17:25:27 +0800</pubDate><description><![CDATA[提示：文章写完后，目录可以自动生成，如何生成可参考右边的帮助文档

文章目录前言一、pandas是什么？二、使用步骤1.引入库2.读入数据总结

前言
提示：这里可以添加本文要记录的大概内容：
例如：随着人工智能的不断发展，机器学习这门技术也越来越重要，很多人都开启了学习机器学习，本文就介绍了机器学习的基础内容。

提示：以下是本篇文章正文内容，下面案例可供参考
一、pandas是什么？
示例：pandas 是基于NumPy 的一种工具，该工具是为了解决数据分析任务而创建的。
二、使用步骤
1.引入库
代.]]></description><category></category></item><item><title><![CDATA[Android Mvp架构的小demo]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/123338932</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/123338932</guid><author>lbj23vs6</author><pubDate>Mon, 07 Mar 2022 20:56:09 +0800</pubDate><description><![CDATA[文章目录前言MVP模式是MVC模式在Android上的一种变体，要介绍MVP就得先介绍MVC。在MVC模式中，Activity应该是属于View这一层。而实质上，它既承担了View，同时也包含一些Controller的东西在里面。这对于开发与维护来说不太友好，耦合度大高了。把Activity的View和Controller抽离出来就变成了View和Presenter，这就是MVP模式。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e7469fcca61a47a1807a]]></description><category></category></item><item><title><![CDATA[Android 自定义控件之---饼图]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/122464698</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/122464698</guid><author>lbj23vs6</author><pubDate>Thu, 13 Jan 2022 00:07:41 +0800</pubDate><description><![CDATA[文章目录前言一、创建PieChartView继承View类？二、创建一些对象，用于绘图三，onDraw方法1.循环把四个扇形画出来2.我们把第三个扇形抽出来，需要做特殊处理四，效果展示总结效果确实比较简单，但是这个例子可以很好的作为初学Android自定义控件的开发者的一个小练习。code

前言
如下图这样的一个饼图效果，看上去很简单，不如让我们用Android自定义控件的知识来实现它

一、创建PieChartView继承View类？
public class PieChartView extends ]]></description><category></category></item><item><title><![CDATA[android 文字居中的两种方案--静态文字--动态文字]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/121742756</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/121742756</guid><author>lbj23vs6</author><pubDate>Mon, 06 Dec 2021 19:55:02 +0800</pubDate><description><![CDATA[文章目录前言一、静态文字垂直居中？code效果二、动态文字垂直居中你可能会好奇，为什么动态文字不继续用上面静态文字的解决方案呢？不是很方便简洁吗？解决方案code:效果：

前言
一行文字在View中垂直居中不是一件容易的事情，下面针对静态文字和动态文字（内容会变动）的情况提出两种居中的方案。

一、静态文字垂直居中？
由于静态文字不怎么变动，我们只需要测量出这段文字的bounds,在垂直方向上减去中心点的偏移就可以实现居中
code
//静态文字内容
private const val CONTENT .]]></description><category></category></item><item><title><![CDATA[xfermode 和预期效果不符]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/121734029</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/121734029</guid><author>lbj23vs6</author><pubDate>Sun, 05 Dec 2021 20:18:23 +0800</pubDate><description><![CDATA[项目场景：
利用xfermode画一个矩形和原，设置不同的xfermode类型达到不同的效果，就是用两个图形测试下面的效果


问题描述：
如果我们这么写：
canvas.apply {
       val saveLayer = saveLayer(150.dp, 50.dp, 300.dp, 200.dp, paint)
       drawRect(150.dp, 100.dp, 250.dp, 200.dp, paint)
       paint.xfermode = mode
       ]]></description><category></category></item><item><title><![CDATA[自定义View--＞仪表盘]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/121726578</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/121726578</guid><author>lbj23vs6</author><pubDate>Sun, 05 Dec 2021 16:03:25 +0800</pubDate><description><![CDATA[文章目录前言一、先画带锯齿的弧形代码和注释如下：重要点1.PathDashPathEffect2. 刻度和间隔二、画指针总结

前言
提示：这里可以添加本文要记录的大概内容：
例如：随着人工智能的不断发展，机器学习这门技术也越来越重要，很多人都开启了学习机器学习，本文就介绍了机器学习的基础内容。

提示：以下是本篇文章正文内容，下面案例可供参考
一、先画带锯齿的弧形
代码和注释如下：
import android.content.Context
import android.graphics.*
impor]]></description><category></category></item><item><title><![CDATA[手写简易的viewPage--Android---自定义控件]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/120627587</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/120627587</guid><author>lbj23vs6</author><pubDate>Wed, 06 Oct 2021 20:36:12 +0800</pubDate><description><![CDATA[文章目录前言效果展示一、思路是什么？1.一页一个view占满屏幕，所以把自己的所有空间给childView去测量2.摆放时一页摆放一个子view，可以看出left，right是进行累加的3.viewGroup要抢占子view的touch序列4.viewGroup自己的onTouchEvent

前言
在学习了view的点击事件的效应后，我们自己来写一个viewPage，功能比较简单，只有两个页面，我们可以左右滑动来翻页
效果展示


一、思路是什么？
1.一页一个view占满屏幕，所以把自己的所有空间给ch]]></description><category></category></item><item><title><![CDATA[多点触控 Android 自定义控件]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/120617292</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/120617292</guid><author>lbj23vs6</author><pubDate>Wed, 06 Oct 2021 12:13:19 +0800</pubDate><description><![CDATA[文章目录前言一、接力棒型或抢占型二、协作型思路code1.引入库2.读入数据总结

前言
在之前的那篇博客中我们做了一个可以随手指移动的图片view，只能支持单指操控，如果我们多指触控就没事我们想要的效果
多点触控可以有下面这三种类型
①：接力棒型或抢占型
②：协作型
③：互不干扰型

一、接力棒型或抢占型
示例：pandas 是基于NumPy 的一种工具，该工具是为了解决数据分析任务而创建的。
二、协作型
思路
①：确认一个触摸点作为控制图片的特殊触摸点
②：移动时就把拥有图片控制权的触点作为唯一触点
③]]></description><category></category></item><item><title><![CDATA[Android 画板 多指操控 多指绘图]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/120623160</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/120623160</guid><author>lbj23vs6</author><pubDate>Wed, 06 Oct 2021 12:09:31 +0800</pubDate><description><![CDATA[文章目录前言一、思路二、效果展示三：完整代码

前言
是否可以做一个画板，多根手指可以同时绘图，手指移开，移开手指对应的绘图路径也跟着消失

一、思路
①：每根手指对应一个path，记录手指移动时的路径
val actionIndex = event.actionIndex
val path = Path()
path.moveTo(event.getX(actionIndex), event.getY(actionIndex))

②：创建一个map，让pointerID作为key,path作为value]]></description><category></category></item><item><title><![CDATA[图片随手指移动 --自定义控件--onTouchEvent]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/120614107</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/120614107</guid><author>lbj23vs6</author><pubDate>Tue, 05 Oct 2021 15:11:25 +0800</pubDate><description><![CDATA[文章目录前言一、思路？二、完整代码

前言
写一个可以随手指移动而移动的图片，用自定义view实现，重写onTouchEvent方法
一、思路？
①：定义两个偏移量作为绘制图片时的起始位置
    private var offsetX = 0f
    private var offsetY = 0f

②：按下时记录手指的位置
声明
private var downX = 0f
private var downY = 0f

记录
            MotionEvent.ACTION_DOWN ]]></description><category></category></item><item><title><![CDATA[Android自定义view---手势识别，双击，惯性滑动，相册图片效果]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/120603451</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/120603451</guid><author>lbj23vs6</author><pubDate>Mon, 04 Oct 2021 15:52:29 +0800</pubDate><description><![CDATA[文章目录前言一、GestureDetectorCompat是什么？二、使用步骤1.定义一个GestureDetectorCompat的实例2.重写方法，实现自定义效果①想让检测器消费一系列的触摸事件，那么就要在重写方法`onDown`中去返回true，那么后续的一系列触摸过程才能让手势检测器获取②既然我们要去实现双击效果，那么就得再给手势检测器设置一个监听③实现双击变大变小④重写onDoubleTap④实现惯性滑动总结完整代码

前言
在view中我们可以重写onTouchEvent来自定义点击事件，但是M]]></description><category></category></item><item><title><![CDATA[MaterialEditText 标签浮动 自定义view]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/120564544</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/120564544</guid><author>lbj23vs6</author><pubDate>Thu, 30 Sep 2021 15:44:49 +0800</pubDate><description><![CDATA[提示：文章写完后，目录可以自动生成，如何生成可参考右边的帮助文档

文章目录前言做两个动画，监听文本变化，有文本时从下往上飘出一个标签，内容和`EditText`的`hint`内容一致。没有文本（开始时，或者文本删除干净时）标签从上往下逐渐隐藏。二、实现步骤1.创建类MaterialEditText去继承EditText2.创建一些基本变量3.设置文本监听4.写文字5.XML中控制标签动画的开关①自定义属性②使用MaterialEditText时去设置该属性②在MaterialEditText.class ]]></description><category></category></item><item><title><![CDATA[java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.view]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/120564109</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/120564109</guid><author>lbj23vs6</author><pubDate>Thu, 30 Sep 2021 12:22:06 +0800</pubDate><description><![CDATA[项目场景：
在我实现自定义流式布局时，我使用了measureChildWithMargins对


问题描述：
提示：这里描述项目中遇到的问题：
例如：数据传输过程中数据不时出现丢失的情况，偶尔会丢失一部分数据
APP 中接收数据代码：
@Override
        public void run() {
            bytes = mmInStream.read(buffer);
            mHandler.obtainMessage(READ_DATA, bytes, -]]></description><category></category></item><item><title><![CDATA[自定义流式布局--kotlin实现]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/120550090</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/120550090</guid><author>lbj23vs6</author><pubDate>Thu, 30 Sep 2021 11:30:05 +0800</pubDate><description><![CDATA[提示：文章写完后，目录可以自动生成，如何生成可参考右边的帮助文档

文章目录前言一、使用原因1.流式布局中放了许多小的view，要求我们把这些子view妥善的摆放在一个viewgroup中，如果我们在xmL中去实现这个效果，这就要求我们去对每个子view设置margin，padding，还有位置属性。这可能需要花很多时间去摆放，去设置。2.如果我们做一个搜索内容的历史记录，那么我们事先是不知道子view的条目和具体内容的，所以我们也没法在XML中去书写，那么我们就需要一个viewgroup去对数据进行操作，]]></description><category></category></item><item><title><![CDATA[Android 安卓自定义流式布局]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/118969699</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/118969699</guid><author>lbj23vs6</author><pubDate>Wed, 21 Jul 2021 16:52:42 +0800</pubDate><description><![CDATA[文章目录前言一、如何实现？二、使用步骤1.重写onMeasure方法2.重写onLayout三、项目代码总结

前言
最近接触了自定义ViewGroup，准备写一个自定义流式布局练练手，流式布局广泛应用于安卓开发中，许多APP的历史记录就应用了这一模式



一、如何实现？
需要去继承ViewGroup，重写ViewGroup的方法
二、使用步骤
1.重写onMeasure方法
代码如下：
    /**
     * 测量控件本身的大小   宽和高   根据子内容获取
     *
     * @pa.]]></description><category></category></item><item><title><![CDATA[2021-07-09Android Studio Layout 预览只显示两个小扳手怎么办]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/118609600</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/118609600</guid><author>lbj23vs6</author><pubDate>Fri, 09 Jul 2021 16:30:15 +0800</pubDate><description><![CDATA[删除布局代码中的
                android:autofillHints=""

这一行代码即可。

]]></description><category></category></item><item><title><![CDATA[2021-07-07Recyclerview 实现几行item均分Recycleview的高度--一个数目固定的均分空间的Recyclerview]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/118549952</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/118549952</guid><author>lbj23vs6</author><pubDate>Wed, 07 Jul 2021 16:35:21 +0800</pubDate><description><![CDATA[项目场景：
我们用Recyclerview做了一个键盘，我们希望几行键盘可以均分Recyclerview的空间，以适应不同的机型，避免在不同的屏幕上出现键盘下方有空隙，或者显示不全的情况
想要的效果：

问题描述：



解决方案：
Adapter中定义一个成员变量
protected int along;

在onCreateViewHolder中设置为Recyclerview的高度➗行数，即每行所占的空间。
    public GridViewAdapter.InnerHolder onCreateV]]></description><category></category></item><item><title><![CDATA[2021-07-01Type parameter ‘com.sevegame.calculator.fragment.general.GeneralFragment‘ is not within it]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/118379904</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/118379904</guid><author>lbj23vs6</author><pubDate>Thu, 01 Jul 2021 10:20:29 +0800</pubDate><description><![CDATA[项目场景：
写了一个BaseFragment，使用了泛型，需要传入一个layout的ViewBinding

public abstract class BaseFragment&lt;T extends ViewBinding&gt; extends Fragment {
    protected final String TAG = this.getClass().getSimpleName();
    protected T binding;

问题描述：
之后写了一个BaseFragment的实]]></description><category></category></item><item><title><![CDATA[2021-06-20 Bug--＞This AsyncTask class should be static or leaks might occur]]></title><link>https://blog.youkuaiyun.com/lbj23vs6/article/details/118073844</link><guid>https://blog.youkuaiyun.com/lbj23vs6/article/details/118073844</guid><author>lbj23vs6</author><pubDate>Sun, 20 Jun 2021 20:02:34 +0800</pubDate><description><![CDATA[项目场景：
当我在项目中需要对一个复杂操作进行异步处理时，需要使用AsyncTask进行异步，而我们写完后，android studio提示内存泄漏，需要让这个AsyncTask内部类成为静态类，成为静态类后这个问题也没有得到解决，还是会报这个
This AsyncTask class should be static or leaks might occur

问题描述：
如何解决AsyncTask会报内存泄漏的警告。


原因分析：
AsyncTask有对使用它的Activity或者Fragment有隐]]></description><category></category></item></channel></rss>