<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[3Blue1Red的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Blue3Red1</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Blue3Red1]]></copyright><item><title><![CDATA[Python 使用 Qt5 实现水平导航栏]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/129311816</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/129311816</guid><author>Blue3Red1</author><pubDate>Fri, 03 Mar 2023 01:01:00 +0800</pubDate><description><![CDATA[在 Qt5 中可以使用 QWidget 包含两个水平布局，通过点击水平布局里的按钮，实现下标滑动与页面的切换。]]></description><category></category></item><item><title><![CDATA[Python 虚拟环境的使用]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/129300890</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/129300890</guid><author>Blue3Red1</author><pubDate>Thu, 02 Mar 2023 15:14:49 +0800</pubDate><description><![CDATA[macOS 安装并配置 Python 虚拟环境]]></description><category></category></item><item><title><![CDATA[Java 动态代理学模式习与分析]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/116923119</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/116923119</guid><author>Blue3Red1</author><pubDate>Mon, 17 May 2021 16:55:57 +0800</pubDate><description><![CDATA[预备知识：反射、静态代理模式
由于静态代理的缺陷，我们要手动为每一个目标类编写对应的代理类。如果当前系统已经有成百上千个类，这会使得工作量成倍增加。
一、动态代理使用
1. 基本了解

动态代理和静态代理角色一样。
动态代理的代理类是动态生成的，不是我们直接写好的。
动态代理分为两大类:基于接口的动态代理，基于类的动态代理。以下使用的是基于接口的JDK动态代理。


使用前我们需要大概了解两个类，
Proxy 类和 InvocationHandler 类。
Proxy 类中有一个 newProxyInsta]]></description><category></category></item><item><title><![CDATA[Android框架 使用DataBinding绑定View]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/113508632</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/113508632</guid><author>Blue3Red1</author><pubDate>Tue, 11 May 2021 17:46:35 +0800</pubDate><description><![CDATA[数据绑定库是一个 Android Jetpack 库，它允许您使用声明性格式而不是通过编程方式将XML布局中的UI组件绑定到应用程序中的数据源，从而减少了样板代码。dataBinding 可以很好的和 View Model 配合使用。这里就简单学习一下 dataBinding 防止碰到的时候看不懂。]]></description><category></category></item><item><title><![CDATA[Android控件 状态颜色控制ColorStateList简单使用]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/112969050</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/112969050</guid><author>Blue3Red1</author><pubDate>Fri, 22 Jan 2021 14:51:35 +0800</pubDate><description><![CDATA[Refer from : How do I create ColorStateList programmatically?
https://stackoverflow.com/questions/15543186/how-do-i-create-colorstatelist-programmatically?answertab=active#tab-top
private class ColorStateListBuilder {
    List&lt;Integer&gt; colors = new A]]></description><category></category></item><item><title><![CDATA[Android开发 创建与获取Assets目录]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/112966341</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/112966341</guid><author>Blue3Red1</author><pubDate>Thu, 21 Jan 2021 17:13:46 +0800</pubDate><description><![CDATA[一、创建 Assets 目录
先创建一个文件，位于编译后的class文件目录。然后再把该文件的绝对路径做截取，便能得到项目在电脑上的绝对路径(每个项目在电脑上路径都不一样)。再拼接上src/main/assets便能实现 Assets目录JSON文件的创建了。
StandardLocation.CLASS_OUTPUT：java文件生成class文件的位置，/app/build/intermediates/javac/debug/classes/目录下
private final static String]]></description><category></category></item><item><title><![CDATA[Android控件 自定义Spinner微调框]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/112743831</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/112743831</guid><author>Blue3Red1</author><pubDate>Sun, 17 Jan 2021 19:42:55 +0800</pubDate><description><![CDATA[一、使用 XML 代码设置 Spinner

在 values 文件夹中创建 array.xml 文件
&lt;resources&gt;
    &lt;string-array name="spinner_array"&gt;
        &lt;item&gt;请选择&lt;/item&gt;
        &lt;item&gt;动作&lt;/item&gt;
        &lt;item&gt;科幻&lt;/item&gt;
        &lt;item&gt;冒险&lt;/item]]></description><category></category></item><item><title><![CDATA[AndroidStudio插件 GsonFormatPlus使用]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/112726627</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/112726627</guid><author>Blue3Red1</author><pubDate>Sun, 17 Jan 2021 12:46:56 +0800</pubDate><description><![CDATA[How to use lombok plugin in Android Studio?
https://stackoverflow.com/questions/37991892/how-to-use-lombok-plugin-in-android-studio

]]></description><category></category></item><item><title><![CDATA[Android框架 使用ViewBinding和ButterKnife]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/112645194</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/112645194</guid><author>Blue3Red1</author><pubDate>Sat, 16 Jan 2021 16:48:23 +0800</pubDate><description><![CDATA[ButterKnife 10.2.3 Github 网站：
https://github.com/JakeWharton/butterknife
进入 github 网站就可以看到：
Attention: This tool is now deprecated. Please switch to view binding. Existing versions will continue to work, obviously, but only critical bug fixes for integrati]]></description><category></category></item><item><title><![CDATA[Android数据库 GreenDao简单使用]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/111933850</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/111933850</guid><author>Blue3Red1</author><pubDate>Wed, 30 Dec 2020 16:16:53 +0800</pubDate><description><![CDATA[一、GreenDao 简介

Android 平台的对象关系映射工具(ORM)
为关系型数据库提供面向对象的接口
简化数据库操作

所谓ORM框架，即Object Relational Mapping，它的作用是在关系型数据库和对象之间作一个映射。这样在具体的操作数据库的时候，就不需要再去和复杂的SQL语句打交道，只要像平时操作对象一样操作它就可以了。
个人觉得Jetpack的Room更好用一些。
1. GreenDao 的核心概念


某实体类 -&gt; 某表
持久对象，通常实体是使用标准 Java 属]]></description><category></category></item><item><title><![CDATA[Android框架 使用Glide加载图片]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/111689146</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/111689146</guid><author>Blue3Red1</author><pubDate>Fri, 25 Dec 2020 18:24:04 +0800</pubDate><description><![CDATA[Glide很好用很好用很好用很好用很好用。
一、原生代码加载图片对比
使用URLConnection配合Hanlder加载图片。
1. 申请网络权限
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;network-security-config&gt;
    &lt;base-config cleartextTrafficPermitted="true"/&gt;
&lt;/network-security-config&gt;

 &lt;uses-pe]]></description><category></category></item><item><title><![CDATA[Android控件 RecyclerView基本使用/常见问题]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/111673092</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/111673092</guid><author>Blue3Red1</author><pubDate>Fri, 25 Dec 2020 14:19:56 +0800</pubDate><description><![CDATA[RecyclerView 很强大很好用，直接开整。
一、RecyclerView 准备工作

Gradle 中引入 dependencies 闭包

dependencies {
	implementation 'androidx.recyclerview:recyclerview:1.1.0'
}


修改 activity_main.xml，配置按键 和 RecyclerView 控件 layout

&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;Li]]></description><category></category></item><item><title><![CDATA[Java多线程 基础学习笔记/静态代理模式]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/111563957</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/111563957</guid><author>Blue3Red1</author><pubDate>Tue, 22 Dec 2020 20:39:57 +0800</pubDate><description><![CDATA[一、线程简介
1. 任务，进程，线程，多线程

进程
说起进程就不得不说下程序。程序是指令和数据的有序集合，其本身没有任何运行的含义，是一个静态的概念。而进程则是执行程序的一次执行过程，它是一个动态的概念。是系统资源分配的单位。
线程
通常在一个进程中可以包含若干个线程，当然一个进程中至少有一个线程，不然没有存在的意义。线程是CPU调度和执行的的单位。
多任务
现实中太多这样同时做多件事情的例子了，看起来是多个任务都在做，其实本质上我们的大脑在同一时间依旧只做了一件事情。
多线程
原来是一条路，慢慢因为车太]]></description><category></category></item><item><title><![CDATA[Java Lambda表达式学习笔记]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/111386574</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/111386574</guid><author>Blue3Red1</author><pubDate>Fri, 18 Dec 2020 17:56:08 +0800</pubDate><description><![CDATA[一、Lamda表达式
Lambda 表达式是 JDK8 的一个新特性，可以取代大部分的匿名内部类，写出更优雅的 Java 代码，尤其在集合的遍历和其他集合操作中，可以极大地优化代码结构。

λ希腊字母表中排序第十一位的字母，英语名称为Lambda
其实质属于函数式编程的概念

(params) -&gt; expression [表达式]
(params) -&gt; statement [语句]
(params) -&gt; { statements }
例如：new Thread ( () -&gt; ]]></description><category></category></item><item><title><![CDATA[Android网络 Retrofit简易用法]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/110821698</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/110821698</guid><author>Blue3Red1</author><pubDate>Mon, 07 Dec 2020 23:48:05 +0800</pubDate><description><![CDATA[一、简介及使用前配置
Retrofit 是对 OkHttp 的封装，是主流的网络框架。
Retrofit Github 主页：https://github.com/square/Retrofit
使用 Retrofit 学习常见的网络请求

GET 请求
普通 POST form 请求
Content- Type: application/x-www-form-urlencoded
支持文件上传的 POST form 请求
Content-Type: multipart/form-data; boundar]]></description><category></category></item><item><title><![CDATA[Android网络 OkHttp简易用法/回调/Builder设计模式]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/110586416</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/110586416</guid><author>Blue3Red1</author><pubDate>Fri, 04 Dec 2020 16:54:22 +0800</pubDate><description><![CDATA[这么多网络框架为什么使用OkHttp？因为不仅在接口封装上做的简单易用，在底层实现上也上自成一派，比起原声的HttpURLConnection，可以说上有过之而无不及，现在已经成了广大Android开发者首选的网络通信库。
OkHttp项目主页：https://github.com/square/okhttp
使用OkHttp学习常见的网络请求

GET
普通POST form请求
Content- Type: application/x-www-form-urlencoded
支持文件上传的POST fo]]></description><category></category></item><item><title><![CDATA[Android多线程 AsnycTask异步任务类使用]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/109647240</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/109647240</guid><author>Blue3Red1</author><pubDate>Thu, 12 Nov 2020 16:59:00 +0800</pubDate><description><![CDATA[一、AsnycTask的使用：
1.定义
AsyncTask异步任务类，比Handle更轻量级，更适合简单的异步操作。内部封装了Handle，在使用AsyncTask类进行刷新控件的刷新操作时，不用再额外创建声明Handle，可以直接使AsyncTask内部封装好的几个方法实现。
2.同步和异步的区别
同步：当我们执行某个功能时，在没有得到结果之前，这个调用就不能返回！简单点就是说必须等前一件事做完才能做下一件事；举个简单的例子：比如你啪啪啪，为了避免弄出人命，肯定要先戴好套套，然后再啪啪啪是吧~套套戴好，]]></description><category></category></item><item><title><![CDATA[Android本地存储 SharePreference和读取设备内外数据]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/109076919</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/109076919</guid><author>Blue3Red1</author><pubDate>Fri, 16 Oct 2020 02:12:37 +0800</pubDate><description><![CDATA[Android常用数据存储
1.SharedPreferences存储数据

SharedPreferences用于存放一-些类似登录的配置信息
本质上是一个xml文件,是通过类似键值对的方式存放信息
位于程序私有目录中,即data/data/[packageName]/shared_ prefs

SharedPreferences操作模式

MODE_ PRIVATE: 私有方式存储,其他应用无法访问
MODE_ WORLD_ READABLE:可被其他应用读取
MODE_ WORLD_ WRITEAB]]></description><category></category></item><item><title><![CDATA[Adnroid组件 Activity数据传递/DialogActivity使用]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/108906156</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/108906156</guid><author>Blue3Red1</author><pubDate>Sat, 03 Oct 2020 00:42:51 +0800</pubDate><description><![CDATA[一、Activity Dialog 概述
在使用 Dialog 时，如果需要用到很多自己设计的控件，虽然可以让弹出框显示出我们需要的界面，但却无法找到地方完成控制代码的编写，如何解决这个问题呢，我们可以将Activity伪装成Dialog弹出框，这样既显示了界面，又可以在Activity里写控制代码。这就是DialogActivity。
默认情况下，一个 Activity 占据整个屏幕。然而，可以为一个 Activity 设置一个“对话框”主题，这样它就能像一个浮动的对话框显示出来了。举个例子，你可能想要把]]></description><category></category></item><item><title><![CDATA[Android组件 Activity的显式启动与隐式启动详解]]></title><link>https://blog.youkuaiyun.com/Blue3Red1/article/details/108903751</link><guid>https://blog.youkuaiyun.com/Blue3Red1/article/details/108903751</guid><author>Blue3Red1</author><pubDate>Fri, 02 Oct 2020 19:25:23 +0800</pubDate><description><![CDATA[显式启动：
显式启动比较简单，首先创建一个Intent，指定应用程序上下文和需要启动的Activity，然后调用startActivity来启动新的Activity。
&lt;!--AndroidManifest.xml--&gt;
&lt;activity android:name=".SecondActivity"&gt;&lt;/activity&gt;

//启动Activity
Intent it = new Intent(this, SecondActivity.class);
startAct]]></description><category></category></item></channel></rss>