
Android小技巧
天花板之恋
在coding的路上
展开
-
adb命令相关
这可以找到对应包名安装文件的位置。列出所有已经安装的程序的信息。可以强制卸载对应包名的应用。kill特定包名的进程。原创 2022-12-08 15:32:01 · 989 阅读 · 0 评论 -
一个很强大的Android源码在线查看网站
一个很强大的Android源码在线查看网站https://cs.android.com/原创 2021-07-02 16:35:19 · 617 阅读 · 0 评论 -
数字显示控件 -- 均匀长度显示
使用Android原生的TextView来显示号码存在一个问题,都是11位数的两个号码,他们的长度可能差别挺大的。这是由于TextView在显示字符串的时候,是根据文字需要的显示的宽度去测量并绘制的,数字“1”和数字“8”占用的像素宽度并不一样。如下:这个时候产品部的同事把这个问题揪出来提给了我,怎么办呢?那就自定义控件呗。效果对比如下:下面就是我自己定义的显示数字的控件,同时还可以实现选中的颜色匹配效果:下面贴出代码,由于只是在项目中用过一次,所以封装性不是很好,一些参数如文字大小、上下间隔距原创 2020-10-14 17:59:16 · 279 阅读 · 0 评论 -
利用贝塞尔曲线绘制水波纹动态图案
贝塞尔曲线可以通过设置很少的控制点,来绘制想要的平滑的曲线。下面是我使用贝塞尔曲线实现的水波纹效果,直接贴出关键代码public class BezierView extends View { private static final String TAG = "BezierView"; private Paint mPaint; private Path mBezierPath; private ValueAnimator valueAnimator;原创 2020-09-28 14:50:01 · 571 阅读 · 0 评论 -
缩短应用冷启动时间实战小记
这里说的冷启动,不是真正的冷启动,而是第一次从Launcher打开应用的过程。我在项目中负责的应用属于核心应用,应用在开机之后就会启动起来,并在后台运行一个核心服务。但是由于界面布局复杂,数据状态比较多,导致用户第一次点进应用时,等待的时间比较长,大概有2s多吧。在使用了异步加载数据和优化布局后,发现效果还是不够理想。应用的Activity中包含了许多Fragment,在开始的时候就会去加载显示一个Fragment。通过打印信息发现,第一个Fragment内部通过LayoutInflater去加载View原创 2020-08-21 17:14:25 · 285 阅读 · 0 评论 -
Android Window浮窗两种透明的方式
通过WindowManager添加一个弹窗,系统默认会给弹窗添加黑色的背景。这个时候如果想要一个半透明的效果,有两种方式:1,设置WindowManager.LayoutParams的alpha属性,取值在0.0-1.0之间,值越小越透明。WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();wmParams.alpha = 0.2f;设置了这个透明值之后,弹窗中所有的内容,不管是根布局还是子控件,都会变得透明原创 2020-05-20 10:11:26 · 2625 阅读 · 1 评论 -
小图标转动
如何让一个刷新的小图标转起来?so easy,写个属性动画xml,然后在代码中加载进来,在view中使用动画就搞定,在此记录一下。<?xml version="1.0" encoding="utf-8"?><rotate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:fillAfter="false" android:fillB原创 2020-05-13 17:25:02 · 268 阅读 · 0 评论 -
Binder通信机制更高级的写法
通过操作ServiceManager.addService (String name, IBinder service)方法,可以在service端注册多个binder通信服务。如下:ServiceManager.addService(BT_MUCIS_SERVICE, BtMusicService.getInstance());ServiceManager.addService(BT_PHO...原创 2020-04-08 15:59:51 · 223 阅读 · 0 评论 -
Android Studio 3.5后AIDL编译遇到的坑
由于公司换了笔记本,需要切换新的工作环境,于是安装了AS最新的3.5.2版本,导入项目之前的代码,build一下,发现报了一大堆问题。点进去发现,很多的AIDL文件在自动生成.java接口文件的时候,发生了异常,java文件只生成了一段,并不完整。文件最后类似如下:}}private static class Proxy implements com.coagent.proxy.navi....原创 2020-03-27 11:55:52 · 2907 阅读 · 1 评论 -
Android Studio使用.9.png图片的坑
起因:最近在使用美工给的.9图片的时候,Android Studio 总是提示:Error:found an invalid color然后查看build日志,里面有提示:.9.png error: file failed to compile反正就是.9图片有问题,导致IED不能识别和编译.寻找解决:1.然后按照网上说的方法,在build.gradle里添加aaptOptio...原创 2019-12-19 11:15:16 · 10590 阅读 · 5 评论 -
Android中设置线程优先级方法
有时候,我们会创建一个线程去操作一个比较耗时的任务,同时它的优先级不需要很高,不能应用这个耗时的工作线程,影响了整机的性能,那么我们可以通过Process.setThreadPriority(int i) 这个函数,去设定线程的优先级。数值越大,那么优先级就越低。SDK中定义了很多的优先级数值等级,如下:THREAD_PRIORITY_DEFAULT,默认的线程优先级,值为0。THREAD_...原创 2019-09-04 10:20:02 · 4692 阅读 · 0 评论 -
Android Studio 开发填坑小结
1、发现在gradle文件中有引入V4和V7包,但是在代码里面就是导入不进来support包里面的相关类。不管怎么clean、怎么rebuild都不行。答案原来是,当Android Studio版本在3.2以及之后的版本中,gradle会自动导入一个叫AndroidX这样一个包,这个包是谷歌在高版本中才有的,它是整合了V4和V7包。也就是说有了这个AndroidX,你就导入不进来V4和V7包了。...原创 2019-07-29 22:01:32 · 284 阅读 · 0 评论 -
Android Studio加载library
1、project新建一个module2、选择Import Gradle Project3、选择你要导入的库4、导入之后,查看这里会有一个引用的描述5、做完以上步骤之后,我发现我还是不能使用library里面的类,提示找不到。后面我在主项目的build.gradle文件中添加了引用,然后再sync同步一下就OK了。...原创 2019-06-28 17:37:16 · 406 阅读 · 0 评论 -
RelativeLayout.LayoutParams学习与运用
1、了解LayoutParams其实LayoutParams就是代表一个布局属性,每一个ViewGroup对应一种LayoutParams。LinearLayout对应LinearLayout.LayoutParams,RelativeLayout对应RelativeLayout.LayoutParams。我们在XML中写的大多数属性,在代码中通过LayoutParams同样可以操作界面布局。下面以原创 2017-02-23 15:11:25 · 5370 阅读 · 0 评论 -
Drawable与Bitmap的联系与区别
在Android中,Drawable代表的是处理图像通用的类,它还有很多子类,其中一个就是BitmapDrawable。 Bitmap称作位图,后缀名通常为bmp。Bitmap是一个Drawable,但是Drawable不只仅仅包含Bitmap这一类图像。 Drawable转Bitmap:private Bitmap bitmap;private void drawableToBitamp(Dr原创 2017-06-15 17:51:18 · 1345 阅读 · 0 评论 -
设置按钮的滑动动画实现
我们在做一些自定义控件的时候,涉及到一些切换的动画效果,我们的项目中经常用到一个封装好的方法来实现这个效果,代码如下:/** *此为左右滑动的动画 * @param moveX * 移动到的位置 * @param view * 需要移动的试图 */ private void startAn原创 2017-07-26 15:36:05 · 851 阅读 · 0 评论 -
Binder远程服务重连机制
1、概述 在日常的开发中,我们经常会定义AIDL接口文件,然后使用BindService或者ServiceManager.getService(String name)的方式绑定一个远程的服务,获取到IBinder对象,然后转换成接口使用。但是一旦远程服务异常挂掉,这个时候客户端与服务端的连接其实已经断开了,在客户端就收不到任何服务端的信息。因此我们在客户端需要有一个重连机制,在服务断开的时候,...原创 2018-08-28 09:57:15 · 1510 阅读 · 0 评论 -
RecycleView 中item布局的width、height无作用问题
最近在使用recycleView的时候,发现无论我怎么设置子项item布局宽和高,都没有作用,而只是包裹了内容的宽高。 XML如下:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="1500px" android:layou...原创 2018-09-14 10:49:54 · 1155 阅读 · 1 评论 -
AS使用技巧
1、Ctrl +F :当前文件搜索选定的成员2、Ctrl+Shift +F:在整个工程查看选中的成员原创 2018-09-25 18:24:02 · 442 阅读 · 0 评论 -
在子线程中快速使用Handler
很多时候,我们需要在其他线程使用Handler,特别是在一些远程回调方法中。这个时候,我们直接用Handler发送消息会出问题,提示我们没有Looper初始化;但我们并不能在代码中去初始化Looper然后loop(),因为这样会阻塞线程的。因此我们可以使用主线程原有的MessageQueue,在创建Handler的时候把主线程的Looper放进去:private void initHandler...原创 2018-11-01 11:24:56 · 597 阅读 · 0 评论 -
AIDL文件定义参数前面的in、out、inout修饰符
通常我们在定义aidl文件里面的方法的时候,很少注意或者很少用到到参数的修饰符:in 、out 、inout,它们代表的是客户端和服务端数据相互传递的规则。in代表参数只能从客户端传到服务端;out代表此参数从客户端传递不到服务端,但是服务端中对应的这个参数如果改变,客户端的参数对象是会改变的;inout则是相互之间都是可以传递和感知的。默认的参数修饰就是in。...原创 2018-11-05 11:00:41 · 1530 阅读 · 0 评论 -
自定义Toast
我们可以根据自己UI的需求,加载布局xml文件来实现自定义Toast。同时,也可以根据需求,缩短Toast的显示时间。public class MyToast { TextView wtext = null; Toast mToast = null; public MyToast(Context ct) { LayoutInflater inflater = (LayoutInfl...原创 2018-11-14 19:10:58 · 1168 阅读 · 0 评论 -
RecycleView底部刷新闪屏问题解决
使用NestedScrollView,当拉到底部的时候去请求服务器加载更多mNestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { @Override public void onScrollChange(NestedScr...原创 2019-06-26 11:34:51 · 677 阅读 · 0 评论 -
ViewTreeObserver 监听整个视图发生的变化情况
在项目中有这样一个需求,我的某一个控件需要根据其他控件的高度来确定自己的高度,以达到适配的效果。因此,我需要在整个视图完成布局之后,就获得这些高度的参数,在网上搜索了资料后发现,ViewTreeObserver可以完成这样的功能任务。 ViewTreeObserver是一个视图树的观察者,只要视图发生且不局限于以下几个方面的变化时,都会有回调:整个视图树的布局变化,开始绘制视图,触摸模式改变等等。原创 2017-04-18 11:04:59 · 2291 阅读 · 0 评论