自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 Android 图像混合技术

色彩知识、Xfermode、BlendMode

2022-12-28 22:02:02 638 1

原创 DeadObjectException解题

DeadObjectException、try-catch、JVM、Activity.onWindowFocusChanged

2022-12-07 16:24:41 1394

原创 Surface先进行lockCanvas,随后绘制视频引发的IlleageArgumentException

表现形式在SurfaceView或者SurfaceTextture中,先对拿到serface,对其lockCanvas获得画布,绘画解除锁定后,又播放视频。出现了崩溃。思路来源https://stackoverflow.com/questions/48988467/using-a-surface-in-mediaplayer-after-it-has-been-manually-drawn-onhttps://source.android.com/devices/graphics/arch-sh

2022-04-19 19:49:46 2572

原创 ViewPager2一页展示多个Item且两边滑动

ViewPager2一页展示多个Item且两边滑动研究背景在项目中有一个滚轮选择器的需求,对于小组件的研发,我一直倾向于自研,一方面功能不复杂,另一方面也锻炼自己的思维能力。不只是局限于上次研发。传统Viewpager解决方法对于传统的Viewpager的解决方法是 <androidx.viewpager.widget.ViewPager android:layout_width="match_parent" android:clipToPad

2022-04-09 14:16:54 3080 1

原创 Java 流

Java 流什么是流流是一个相对抽象的概念,所谓流就是一个传输数据的通道,这个通道可以传输相应类型的数据。进而完成数据的传输。这个通道被实现为一个具体的对象。字符流和字节流抽象类处理字节:InputStream OutputStream处理字符:Reader WriterJava中字符是以Unicode形式存储的,一个字符占用两个字节,然而InputStream和OutputStream都是以字节形式读取或写出数据的,会将一个字符拆分成两个字节来读写这样会造成乱码基础

2022-03-29 16:18:49 8967 2

原创 Java多线程 - 锁

Java多线程 - 锁三性可见性指的是线程之间的可见性,一个线程对状态的修改,对其他线程是可见的。在 Java中 volatile、synchronized 和 final 实现可见性。原子性如果一个操作是不可分割的,我们则称之为原子操作,也就是有原子性。比如i++,就不是原子操作。在Java 中 synchronized和在lock、unlock 中操作保证原子性有序性一系列操作是按照规定的顺序发生的。如果在本线程之内观察,所有的操作都是有序的,如果在其他线程观察,所有的操作都是

2022-03-28 15:34:30 6547 1

原创 PopupWindow弹出与消失动画

PopupWindow弹出与消失动画代码出现动画<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="400"> <scale android:fromXScale="0" android:fromYScale="0" a

2022-03-02 13:51:07 471

原创 ValueAnimation 是如何刷新的

ValueAnimation 是如何刷新的背景之前,技术分享讲过ValueAnimation底层源码。但是,没有提到,Animation的更新。此篇文章,聚焦于ValueAnimation start方法开始,到Choreographer的响应回调。ValueAnimator部分ValueAnimator.start()从思维逻辑上,start方法是动画启动的入口,那绘制应该也从这里开始寻找 //ValueAnimator @Override public void start(

2022-02-17 17:01:07 1160

原创 实现SeekBar的自定义View

前言自己来实现一个SeekBar,其实不难。主要就是点击事件的处理,还有就是跟随手指滑动来放置View。Code/** * @author: guoxuan * @version: 1.0 * @date:2022/02/07 * class desc:滑动选择控件 - 只负责滑动,回调进度 */class SlidingControlView : RelativeLayout { private lateinit var mSlider: View private l

2022-02-10 18:16:56 1383

原创 Flutter 页面跳转

Flutter 页面跳转Flutter - 跳转全屏页面Navigator.push(context, MaterialPageRoute(builder: (context) => MyPage()));Flutter - 跳转透明背景页面 Navigator.of(context).push(PageRouteBuilder( opaque: false, pageBuilder: (BuildContext context, Animat

2021-12-20 18:34:22 1287

原创 System.currentTimeMillis() 判断次日留存的坑

背景公司有需求,自己统计次日留存。但是发现,首日用户注册在早上6点,在早上8点以后就直接上报次日留存了。代码关键代码就是判断是否是昨天 //判断选择的日期是否是昨天 public static boolean isYesterday(long timeInMillis) { Calendar cal = Calendar.getInstance(); long lt = timeInMillis / 86400000; long ct =

2021-12-06 17:03:23 484

原创 滑动退出View设计思路

滑动退出View设计思路知识点滑动冲突的解决,立足点在于事件传递。简单的事件传递默认大家都已经知道了。在这次解决问题过程中,有几个点,我认为较为重要。当子View决定处理Down以后,在父View的onInterceptTouchEvent中,决定拦截后续的某个事件,子View会收到Cancel事件。当在onInterceptTouchEvent中决定拦截子View的事件,并返回true后,将不再通过onInterceptTouchEvent传递事件,而是直接传到onTouchEvent中。

2021-07-23 16:09:38 246

原创 修改最近任务图标和名称

修改最近任务图标和名称代码val description: ActivityManager.TaskDescription = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) { ActivityManager.TaskDescription("手机管家", R.drawable.ic_app_icon)} else { ActivityManager.TaskDescriptio

2021-05-26 11:55:36 653

原创 BottomSheetDialog与EditView软键盘遮挡问题

BottomSheetDialog与EditView软键盘遮挡问题问题描述我继承了BottomSheetDialog来自定义一个Dialog,Dialog中有一个EditText,在弹出软键盘时,“遮挡”了部分弹窗。原理分析BottomSheetDialog 内部有一个BottomSheetBehavior,他拥有一个部分隐藏的行为。解决代码dialog代码class MyDialog : BottomSheetDialog { private val mContext: Contex

2021-03-24 19:06:31 743

原创 [Fix] 打包java.lang.IllegalArgumentException

[Fix] 打包java.lang.IllegalArgumentException场景在项目中添加了新的SDK或引入了新的包。Debug运行正常,但是打Release包报错。Exception打包报错Unexpected error while computing stack sizes: Class = [aegon/chrome/net/impl/CronetBidirectionalStream$3] Method = [run()V] Exception

2021-03-16 14:43:00 544

原创 关于 noHistory 属性引发BUG的实验

关于 noHistory 属性实验起因bugly上有一个Exception,就是下面实验一的Exception。我搜索了Baidu和stack overflow,基本上都是说Dialog和Toast。但是,都不符合我们Exception。直到下面两个Blog。https://blog.csdn.net/dreamfly130/article/details/80775275https://stackoverflow.com/questions/5854290/why-does-resuming-a

2021-02-24 15:51:41 361

原创 Canvas中Xfermode使用

Canvas中Xfermode使用背景有一个需求是一个圆角需要在一个不规则的图形中旋转效果简单的说,就是两张图片交并补,谁去谁留的问题。Democlass ScanView : View { private val redPiePaint: Paint by lazy { Paint() } private val pinkPiePaint: Paint by lazy { Paint() } private val bitmapPaint: Paint by laz

2021-01-10 21:12:45 292 1

原创 ImageView属性ScaleType中Matrix的使用

ImageView属性ScaleType中Matrix的使用背景有一个需求是,两张图片重叠在一起,上层的图片要有一个从下到上消失的动画。尝试解决方案1.使用Canvas中xfermode,放置一张白色图片,修改图片的放置位置。让上层图片实现一部分消失。(太过复杂)2.使用shader去做,也是Canvas中的内容。应用的是当shader比内容小的时候,就不渲染shader外的内容。(没尝试过,没把握)3.跟同事讨论后,可以使用Matrix解决。也就是此篇记录。Matix的效果保证图片的大小,

2021-01-10 20:41:49 1101 1

原创 EventBus 源码解析

EventBus 源码解析我个人习惯于先从某一个业务点入手,从我日常使用的经历来说,比较常用的就是三个函数EventBus.getDefault().register(obj)EventBus.getDefault().unregister(obj)EventBus.getDefault().post(EventMessage())getDefault()首先我们看到的是getDefault()//EventBus:80public static EventBus getDefault()

2020-09-16 21:32:56 166

原创 MessageQueue相关源码

MessageQueue相关源码enqueueMessageenqueueMessage相当于向队列中插入消息。这个函数,是在Handler中,post(r: Runnable)和 sendMessage() 等一系列方法最终调用的方法。//MessageQueue:536boolean enqueueMessage(Message msg, long when) { if (msg.target == null) { throw new IllegalArgumentExc

2020-08-31 22:53:35 240

原创 Looper源码分析

Looper源码分析prepare()首先我们来看,普通现成的Looper初始化。//Looper: 97/** Initialize the current thread as a looper. * This gives you a chance to create handlers that then reference * this looper, before actually starting the loop. Be sure to call * {@link #loop(

2020-08-30 23:37:21 378

原创 Message源码分析

Message源码分析简介上次看了Handler的源码,欠了一部分obtain的代码原理现在补出来。我大概扫了一眼Message的源码,分为三部分成员变量成员函数实现Parcelable的部分其中,比较重要的成员变量,比如what、obj、callback,在之前Handler源码中,也说了。在这里就不再赘述了。成员函数的话,比较重要的就两个,obtain和recycleUnchecked(),剩下的就是一些set和get方法,还有重写的toString什么的,我也不会去说,感觉没什么意

2020-08-30 21:19:52 268

原创 TextSwitcher源码分析

TextSwitcher源码分析TextSwitcher继承自ViewSwitcher,在TextSwitcher.setText()时,会调用ViewSwitcher中的getNextView//TextSwitcher:79/** * Sets the text of the next view and switches to the next view. This can * be used to animate the old text out and animate the next

2020-08-27 23:35:20 152

原创 Handler相关源码分析

Handler相关源码post先看与post相关的代码。post(Runnable r): 把Runnable方法立即放到消息队列里,当handler捕捉到以后,就执行。//Handler:393/** * Causes the Runnable r to be added to the message queue. * The runnable will be run on the thread to which this handler is * attached. *

2020-08-27 23:33:58 98

原创 用OnLayoutChangeListener的方法解决getTop=0的问题

private val mLayoutChangeListener: View.OnLayoutChangeListener by lazy { View.OnLayoutChangeListener { _, _, _, _, _, _, _, _, _ -> checkPosition() mLayout.postDela...

2019-10-11 16:55:43 774

原创 Flutter 与 Android

Flutter 与 Android说明在本人项目中以 aar 的方式,将Flutter接入Android。本文旨在记录,不为教学,不定时更新。Flutter与Android交互退出Flutter ActivityAndroid:class MyClass(context: Context, route: String) : AbstractFlutterPage(context, ro...

2019-04-24 16:10:46 172

原创 Flutter Modul类与Json相互转换

Flutter Modul类与Json相互转换依赖dependencies: json_annotation: ^2.0.0dev_dependencies: build_runner: ^1.0.0 json_serializable: ^2.0.0使用步骤1.创建Modul类import 'package:json_annotation/json_annotatio...

2019-04-22 15:49:25 972

原创 Flutter 判断网络可用性

Flutter 判断网络可用性依赖包dependencies: connectivity: ^0.4.2代码import 'package:connectivity/connectivity.dart';///2019.4.18 By GX///判断网络是否可用///0 - none | 1 - mobile | 2 - WIFIFuture<int> isNe...

2019-04-22 15:27:21 4345

原创 Flutter GridView Demo

GridView代码Widget _buildRechargeGridView() { List<Widget> list = []; for (int i = 0; i < (infoList == null ? 0 : this.infoList.length); i++) { ///初始化每个单元 Widget view = _b...

2019-04-22 11:04:46 244

原创 Flutter ListView 加载更多

Flutter ListView 加载更多实现功能到底加载防止频繁加载加载进度图标全部展示提示功能实现到底加载在initState()中加入 @override void initState() { super.initState(); _scrollController.addListener(() { if (_scrollControll...

2019-04-18 17:30:44 626

原创 MaterialApp

Flutter API学习MaterialApp简介MaterialApp表示,一个APP使用纸墨设计语言(Material Design),里面包含了纸墨设计风格应用所需要的基本控件。构造器const MaterialApp({ Key key, GlobalKey&lt;NavigatorState&gt; navigatorKey, Widget home, Map&lt;...

2019-02-22 14:18:41 633

翻译 Flutter基础

Flutter API学习Flutter基础一切皆witgetWidget是Flutter应用程序用户界面的基本构建块。每个Widget都是用户界面一部分的不可变声明。 与其他将视图、控制器、布局和其他属性分离的框架不同,Flutter具有一致的统一对象模型:widget。Widget可以被定义为:一个结构元素(如按钮或菜单)一个文本样式元素(如字体或颜色方案)布局的一个方面(如填...

2019-02-22 14:16:10 305

转载 秒懂,Java 注解 (Annotation)你可以这样学

文章出处转载自:https://blog.csdn.net/briblue/article/details/73824058 文章开头先引入一处图片。 这处图片引自老罗的博客。为了避免不必要的麻烦,首先声明我个人比较尊敬老罗的。至于为什么放这张图,自然是为本篇博文服务,接下来我自会说明。好了,可以开始今天的博文了。 Annotation 中文译过...

2018-09-11 10:22:57 229

原创 Java回调机制与在Android编程中的使用

说明Java回调机制为引用转载,原文:https://www.cnblogs.com/xrq730/p/6424471.html作者:五月的仓颉Android中使用部分为原创内容,转载请注明出处。作者:GuoXuan_CHNJava回调机制模块间调用在一个应用系统中,无论使用何种语言开发,必然存在模块之间的调用,调用的方式分为几种:(1)同步调用同步调用是最基本...

2018-08-10 18:42:21 240

转载 SmartTabLayout 简介

本文为转载文章,文章原地址为:https://www.jianshu.com/p/1fef849fd1eb 如有侵权,告知必删。 项目地址:https://github.com/ogaclejapan/SmartTabLayout介绍:一个自定义的ViewPager tab指示,可以在滑动的时候让用户感...

2018-08-08 16:34:59 858

转载 给 Android 开发者的 RxJava 详解

该文章为转载,原文地址: https://gank.io/post/560e15be2dca930e00da1083 前言我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 。而最近这几个月,我也发现国内越来越多的人开始提及 RxJa...

2018-08-06 10:16:03 303

转载 手把手教你实现RecyclerView的下拉刷新和上拉加载更多

转载出处http://blog.csdn.net/u012402124/article/details/78210639纵观多数App,下拉刷新和上拉加载更多是很常见的功能,但是谷歌官方只有一个SwipeRefreshLayout用来下拉刷新,上拉加载更多还要自己做。基于RecyclerView简单封装了这两个操作,下拉刷新支持LinearLayo...

2018-07-31 13:45:28 1062

转载 安卓基本权限

访问网络android.permission.INTERNET,访问网络连接,可能产生GPRS流量&amp;nbsp;android.permission.CHANGE_WIFI_STATE Wifi 改变状态&amp;nbsp;android.permission.ACCESS_WIFI_STATE WiF...

2018-07-27 18:48:27 1073

转载 ViewPager用法详细解析

原文地址是:&nbsp;http://blog.csdn.net/urchin_dong/article/details/50712024ViewPager详解ViewPager中的主要方法详解OnPageChangeListener中的三个方法详解三种适配器的使用及其主要...

2018-07-20 15:07:39 511

转载 ViewPager 全面总结

转载自:https://blog.csdn.net/weixin_39251617/article/details/79399592 如有侵权,告知必删。 一、简介Viewpager,视图翻页工具,提供了多页面切换的效果。Android 3.0后引入的一个UI控件,位于v4包中。低版本使用需...

2018-07-20 14:42:41 345

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除