麻麻Android卒
文章平均质量分 61
GuoXuan_CHN
这个作者很懒,什么都没留下…
展开
-
Android 图像混合技术
色彩知识、Xfermode、BlendMode原创 2022-12-28 22:02:02 · 745 阅读 · 1 评论 -
DeadObjectException解题
DeadObjectException、try-catch、JVM、Activity.onWindowFocusChanged原创 2022-12-07 16:24:41 · 1789 阅读 · 0 评论 -
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 · 2706 阅读 · 0 评论 -
Java 流
Java 流什么是流流是一个相对抽象的概念,所谓流就是一个传输数据的通道,这个通道可以传输相应类型的数据。进而完成数据的传输。这个通道被实现为一个具体的对象。字符流和字节流抽象类处理字节:InputStream OutputStream处理字符:Reader WriterJava中字符是以Unicode形式存储的,一个字符占用两个字节,然而InputStream和OutputStream都是以字节形式读取或写出数据的,会将一个字符拆分成两个字节来读写这样会造成乱码基础原创 2022-03-29 16:18:49 · 9249 阅读 · 2 评论 -
ViewPager2一页展示多个Item且两边滑动
ViewPager2一页展示多个Item且两边滑动研究背景在项目中有一个滚轮选择器的需求,对于小组件的研发,我一直倾向于自研,一方面功能不复杂,另一方面也锻炼自己的思维能力。不只是局限于上次研发。传统Viewpager解决方法对于传统的Viewpager的解决方法是 <androidx.viewpager.widget.ViewPager android:layout_width="match_parent" android:clipToPad原创 2022-04-09 14:16:54 · 3488 阅读 · 1 评论 -
Java多线程 - 锁
Java多线程 - 锁三性可见性指的是线程之间的可见性,一个线程对状态的修改,对其他线程是可见的。在 Java中 volatile、synchronized 和 final 实现可见性。原子性如果一个操作是不可分割的,我们则称之为原子操作,也就是有原子性。比如i++,就不是原子操作。在Java 中 synchronized和在lock、unlock 中操作保证原子性有序性一系列操作是按照规定的顺序发生的。如果在本线程之内观察,所有的操作都是有序的,如果在其他线程观察,所有的操作都是原创 2022-03-28 15:34:30 · 6701 阅读 · 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 · 578 阅读 · 0 评论 -
ValueAnimation 是如何刷新的
ValueAnimation 是如何刷新的背景之前,技术分享讲过ValueAnimation底层源码。但是,没有提到,Animation的更新。此篇文章,聚焦于ValueAnimation start方法开始,到Choreographer的响应回调。ValueAnimator部分ValueAnimator.start()从思维逻辑上,start方法是动画启动的入口,那绘制应该也从这里开始寻找 //ValueAnimator @Override public void start(原创 2022-02-17 17:01:07 · 1200 阅读 · 0 评论 -
实现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 · 1445 阅读 · 0 评论 -
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 · 548 阅读 · 0 评论 -
滑动退出View设计思路
滑动退出View设计思路知识点滑动冲突的解决,立足点在于事件传递。简单的事件传递默认大家都已经知道了。在这次解决问题过程中,有几个点,我认为较为重要。当子View决定处理Down以后,在父View的onInterceptTouchEvent中,决定拦截后续的某个事件,子View会收到Cancel事件。当在onInterceptTouchEvent中决定拦截子View的事件,并返回true后,将不再通过onInterceptTouchEvent传递事件,而是直接传到onTouchEvent中。原创 2021-07-23 16:09:38 · 315 阅读 · 0 评论 -
修改最近任务图标和名称
修改最近任务图标和名称代码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 · 760 阅读 · 0 评论 -
BottomSheetDialog与EditView软键盘遮挡问题
BottomSheetDialog与EditView软键盘遮挡问题问题描述我继承了BottomSheetDialog来自定义一个Dialog,Dialog中有一个EditText,在弹出软键盘时,“遮挡”了部分弹窗。原理分析BottomSheetDialog 内部有一个BottomSheetBehavior,他拥有一个部分隐藏的行为。解决代码dialog代码class MyDialog : BottomSheetDialog { private val mContext: Contex原创 2021-03-24 19:06:31 · 862 阅读 · 0 评论 -
[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 · 624 阅读 · 0 评论 -
关于 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 · 424 阅读 · 0 评论 -
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 · 362 阅读 · 1 评论 -
ImageView属性ScaleType中Matrix的使用
ImageView属性ScaleType中Matrix的使用背景有一个需求是,两张图片重叠在一起,上层的图片要有一个从下到上消失的动画。尝试解决方案1.使用Canvas中xfermode,放置一张白色图片,修改图片的放置位置。让上层图片实现一部分消失。(太过复杂)2.使用shader去做,也是Canvas中的内容。应用的是当shader比内容小的时候,就不渲染shader外的内容。(没尝试过,没把握)3.跟同事讨论后,可以使用Matrix解决。也就是此篇记录。Matix的效果保证图片的大小,原创 2021-01-10 20:41:49 · 1289 阅读 · 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 · 228 阅读 · 0 评论 -
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 · 321 阅读 · 0 评论 -
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 · 428 阅读 · 0 评论 -
Message源码分析
Message源码分析简介上次看了Handler的源码,欠了一部分obtain的代码原理现在补出来。我大概扫了一眼Message的源码,分为三部分成员变量成员函数实现Parcelable的部分其中,比较重要的成员变量,比如what、obj、callback,在之前Handler源码中,也说了。在这里就不再赘述了。成员函数的话,比较重要的就两个,obtain和recycleUnchecked(),剩下的就是一些set和get方法,还有重写的toString什么的,我也不会去说,感觉没什么意原创 2020-08-30 21:19:52 · 326 阅读 · 0 评论 -
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 · 182 阅读 · 0 评论 -
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 · 139 阅读 · 0 评论 -
ViewPager用法详细解析
原文地址是: http://blog.csdn.net/urchin_dong/article/details/50712024ViewPager详解ViewPager中的主要方法详解OnPageChangeListener中的三个方法详解三种适配器的使用及其主要...转载 2018-07-20 15:07:39 · 560 阅读 · 0 评论 -
ViewPager 全面总结
转载自:https://blog.csdn.net/weixin_39251617/article/details/79399592 如有侵权,告知必删。 一、简介Viewpager,视图翻页工具,提供了多页面切换的效果。Android 3.0后引入的一个UI控件,位于v4包中。低版本使用需...转载 2018-07-20 14:42:41 · 388 阅读 · 0 评论 -
Fresco简单的使用—SimpleDraweeView
转载自https://blog.csdn.net/y1scp/article/details/49245535 仅作为学习资料备份。如有侵权,告知必删! Fresco简单的使用—SimpleDraweeView 百学须先立志—学前须知:在我们平时加载图片(不管是下载还是加载本地图片…....转载 2018-07-20 14:08:29 · 3247 阅读 · 0 评论 -
手把手教你实现RecyclerView的下拉刷新和上拉加载更多
转载出处http://blog.csdn.net/u012402124/article/details/78210639纵观多数App,下拉刷新和上拉加载更多是很常见的功能,但是谷歌官方只有一个SwipeRefreshLayout用来下拉刷新,上拉加载更多还要自己做。基于RecyclerView简单封装了这两个操作,下拉刷新支持LinearLayo...转载 2018-07-31 13:45:28 · 1133 阅读 · 0 评论 -
安卓基本权限
访问网络android.permission.INTERNET,访问网络连接,可能产生GPRS流量&nbsp;android.permission.CHANGE_WIFI_STATE Wifi 改变状态&nbsp;android.permission.ACCESS_WIFI_STATE WiF...转载 2018-07-27 18:48:27 · 1176 阅读 · 0 评论 -
给 Android 开发者的 RxJava 详解
该文章为转载,原文地址: https://gank.io/post/560e15be2dca930e00da1083 前言我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 。而最近这几个月,我也发现国内越来越多的人开始提及 RxJa...转载 2018-08-06 10:16:03 · 340 阅读 · 0 评论 -
Java回调机制与在Android编程中的使用
说明Java回调机制为引用转载,原文:https://www.cnblogs.com/xrq730/p/6424471.html作者:五月的仓颉Android中使用部分为原创内容,转载请注明出处。作者:GuoXuan_CHNJava回调机制模块间调用在一个应用系统中,无论使用何种语言开发,必然存在模块之间的调用,调用的方式分为几种:(1)同步调用同步调用是最基本...原创 2018-08-10 18:42:21 · 295 阅读 · 0 评论 -
SmartTabLayout 简介
本文为转载文章,文章原地址为:https://www.jianshu.com/p/1fef849fd1eb 如有侵权,告知必删。 项目地址:https://github.com/ogaclejapan/SmartTabLayout介绍:一个自定义的ViewPager tab指示,可以在滑动的时候让用户感...转载 2018-08-08 16:34:59 · 906 阅读 · 0 评论 -
秒懂,Java 注解 (Annotation)你可以这样学
文章出处转载自:https://blog.csdn.net/briblue/article/details/73824058 文章开头先引入一处图片。 这处图片引自老罗的博客。为了避免不必要的麻烦,首先声明我个人比较尊敬老罗的。至于为什么放这张图,自然是为本篇博文服务,接下来我自会说明。好了,可以开始今天的博文了。 Annotation 中文译过...转载 2018-09-11 10:22:57 · 262 阅读 · 0 评论 -
用OnLayoutChangeListener的方法解决getTop=0的问题
private val mLayoutChangeListener: View.OnLayoutChangeListener by lazy { View.OnLayoutChangeListener { _, _, _, _, _, _, _, _, _ -> checkPosition() mLayout.postDela...原创 2019-10-11 16:55:43 · 876 阅读 · 0 评论 -
Android Studio初次进入Building卡住
Android Studio初次进入Building卡住环境Android Studio 2.3.1macOS 10.12.4问题描述初次打开Android studio,开在Building。即显示Building ‘myApplication’ Gradle project info。问题验证命令行打开 # cd ~/.gradle/wrapper/dists/gradle-3.3原创 2017-05-11 00:21:32 · 700 阅读 · 0 评论