自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 DecorView和Window的理解

DecorView Window

2022-07-11 15:39:34 510 1

原创 cardview,button遮盖了别的控件。

FrameLayout、RelativeLayout。直觉上,在控件位置重叠时,xml处于底部的控件会出现在上层。但是CardView,Button这类的控件即便处于xml顶部,仍然会覆盖xml底部的控件。期望:实际:原因:CardView这类的控件默认会设置z轴高度来展示阴影。解决:...

2022-07-06 14:44:29 443

原创 安卓8.0,设置activity背景透明且设置方向,引发Only fullscreen opaque activities can request orientation问题。

安卓8.0同时设置activity为为透明且设置方向将引发引发Only fullscreen opaque activities can request orientation问题。

2022-06-20 11:21:41 322

原创 DecimalFormat 多语言、本地化指定Locale

DecimalFormat 多语言、本地化指定Locale

2022-06-08 11:49:20 411

原创 EditText相关

android editText相关笔记

2022-05-16 18:51:03 68

原创 viewpager懒加载

实现懒加载的方法构造pagerAdapter时设置mBehavior。 FragmentPagerAdapter fragmentPagerAdapter = new FragmentPagerAdapter( getSupportFragmentManager(), FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT )在fragment的onResume中加载数据。设置BEHAVI

2021-04-08 11:23:19 721

原创 android studio debug无法获取local变量

gradle文件buildTypes { debug { minifyEnabled false testCoverageEnabled false } }

2021-01-14 15:22:24 530

原创 clean code 代码整洁之道 读书笔记

有意义的命名命名需明确其作用。命名需避免误导。做有意义的区分。使用能读的出来的命名。使用可搜索的名称。类名应该是名词或名词性短语。方法名应当是动词或动词短语。不要使用俗语、俚语作为命名。相同的概念应使用相同的词,如get方法代表获取。赋予命名语境,“state”无法得知与地址有关,使用addressState会好很多。更好的方案是创建Address。不要添加多余、没用的语境。函数短小,函数的缩进层级不应多于一层或两层。只做一件事。一个函数一个抽象层级,使得代码是自顶向下的

2021-01-06 17:20:15 113

原创 Retrofit + RxJava

使用Retrofit封装网络请求,使用Rxjava处理发起请求以及接下来处理结果的流程。定义网络请求接口public interface RetrofitService { @GET("query") Call<PostInfo> getPostInfo(@Query("type") String type, @Query("postid") String postid);}初始化RetrofitRetrofit retrofit = new Retrofit.Bui

2020-12-24 18:50:18 200 4

原创 rxjava使用小结

定义rxjava是一个基于事件流、实现异步操作的库。作用实现异步操作,类似与asyncTask,handle。意义当需要在后台进行操作,操作完再回调主线程进行ui展示时,若使用经典的异步实现,则会存在多重嵌套的情况,难以读懂。 @Override public void run() { super.run(); for (File folder : folders) { File[] files = folder.listFi

2020-12-24 16:00:02 87

原创 EventBus的使用

EventBus是一款轻量级事件发布/订阅轻量级框架,可以代替Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据,执行方法。注册和取消注册在activity的生命周期中,进行注册的取消注册的操作。如在onCreate中注册,在onDestroy中取消注册。//注册EventBus.getDefault().register(MainActivity.this);//取消注册EventBus .ge

2020-12-24 14:56:25 150

原创 git在android studio中的使用

将git项目clone到本地分支管理新建分支:切换分支

2020-12-24 11:32:30 118

原创 android判断手机是否为24小时制

android.text.format.DateFormat.is24HourFormat(getContext())

2020-05-28 11:20:19 585

原创 系统回收app资源后发生空指针异常的三两事

最近公司的项目经常发生一个奇怪的bug,fragment中的一个成员变量device经常发生空指针异常,但是这个device是从单例中拿到的对象,理论上不论发生何种情况从单例中拿到的对象都不应该为空。在正常的流程里找了很久这个bug发生的原因未果,后来想是不是app被系统回收资源之后发生的异常,经过一系列的debug发现,单例中的拿到的对象依旧不为空,只是成员变量device为空。解决:深究发...

2020-04-20 14:24:10 465

原创 嵌套滑动的LinearLayout(滑动隐藏头部的LinearLayout),滑动时先隐藏头部(第一个子控件)再滑动recyclerview

需求:LinearLayout内部包含一个头部和一个recyclerview。recyclerview可滚动,滚动时如果头部仍在可见则先滚动LinearLayout直到头部消失,再开始滚动recyclerview。思路:自定义LinearLayout实现NestedScrollingParent,getChildAt(0)获取头部,...

2020-04-07 14:59:14 530

原创 高度动态适应的viewpager,高度随子view高度变化

概要需求:viewpager左右滑动后需加载信息(转圈loading),loading时viewpager的高度要求与之前的页面高度相同。在loading结束后根据页面内容重新自适应viewpager的高度。前言:在网上找了些viewpager自适应的实现方案,清一色都是在onMeasure中测量所有子view的高度并将最高的高度作为viewpager的高度。此方案的缺点在于从较高的view切...

2020-04-02 10:57:41 1279

原创 android多线程知识点整理

线程在Android中是个很重要的概念,从用途来说,线程分为主线程与子线程,主线程用于处理界面相关事情,子线程用于执行耗时操作。除了Thread本身外,AysncTask,IntentService及HandleThread在安卓了都扮演着线程的角色。AysncTask:底层封装了线程池和Handler,方便开发者在子线程中更新ui。Handler:具有消息循环的线程,内部可以使用Handle...

2020-03-03 15:40:38 338

转载 camera预览画面,进入子页面,连续锁屏再进入app,返回相机预览页面黑屏。

解决方法:Activity onPause方法,将surfaceview设置成visible,onResume方法设置为gone。网上的分析:原文锁屏下相机资源的释放问题为了节省手机电量,不浪费相机资源,在开发的自定义相机里,如果预览图像已不需要显示,如按Home键盘切换后台或者锁屏后,此时就应该关闭预览并把相机资源释放掉。参考官方API文档,当surfaceView变成可见时,会创...

2020-01-02 16:19:38 1150 1

原创 Glide源码分析笔记

with()函数with函数有多中重载,其参数可能为Context参数,Activity参数,Fragment参数等。glide的加载生命周期会与此参数相关,当该参数销毁时,glide不在继续加载图片。1.当参数为Application时,加载周期与程序生命周期相同不做特殊处理。2.当参数为activity、fragment时,glide会向activity中新增一个空的fragment以监...

2019-12-28 15:20:41 84 1

原创 多张bitmap转gif,并使用DiskLruCache在本地缓存

多张Bitpmap转gif使用AnimatedGifEncoder将bitmap生成gif并存在ByteArrayOutputStream 中。AnimatedGifEncoder是在glide中的一个类,但是后来glide已将该类删除。此文最后附AnimatedGifEncoder代码。 public static void getGifBytesFormYuvList(String f...

2019-12-26 18:18:13 659

原创 Synchronized用法

synchronized分对象锁和类锁,对象锁主要为了保证普通变量的线程安全,相反类锁是为了保证静态变态的线程安全。synchronized修饰实例方法(对象锁) public synchronized void run() { for (int i = 0; i < 5; i++) { } }synchronized修饰静态方法(类锁...

2019-12-23 15:13:55 106

原创 内存泄漏

内存泄漏长生命周期的对象持有短生命周期的对象,会导致短生命周期的对象无法被回收,形成内存泄漏。强引用:系统宁愿抛出异常也不轻易回收强引用对象。弱引用:在内存即将溢出前将弱引用进行回收吗,若回收后仍会发生内存溢出则抛出异常。弱引用:在发生回收事件时,即刻回收弱引用对象。单例造成内存泄漏单例对象会使用static修饰,生命周期即为全局声明生命周期。若其持有较短生命周期的对象则会造成内存泄漏...

2019-11-19 16:09:31 81

原创 videoView / surfaceView 播放前闪屏/黑屏/白屏问题

1.将videoView / surfaceView背景设置为你想要的颜色<VideoView android:id="@+id/video_viewer_video_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="c...

2019-10-11 15:19:36 2585 1

原创 教程连接

图解 Android 事件分发机制https://www.jianshu.com/p/e99b5e8bd67b

2019-10-08 15:47:56 141

原创 可缩放、双指放大的videoview

public class AlbumVideoView extends VideoView implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener { private static final String TAG = "AlbumVideoView"; priva...

2019-09-30 14:32:30 489 1

原创 分享、用第三方app打开视频或图片

分享分享到其他app Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.setType(bean.getType() == VIDEO ? "video/*" : "image/*"); Uri contentUri...

2019-09-30 14:13:00 633

原创 自定义相册,AsyncQueryHandler异步进行数据库操作,Glide展示图片

自定义相册获取数据库图片和视频的列表:使用AlbumAsyncQueryHandler异步进行数据库操作此处注意handler造成的内存泄漏。public class AlbumAsyncQueryHandler extends AsyncQueryHandler { public static final String TAG = "AlbumAsyncQueryHandler...

2019-09-30 12:22:57 174

原创 Gson使用

此文仅作为笔记,部分参考于:1.http://www.jianshu.com/p/0e40a52c00632.《第一行代码》类json:{"name": "TOM", "age": "20"}json -> 类: Gson gson = ne Gson(); Person person = gson.from(jsonString, Person.Class)类 -&gt...

2019-09-30 11:46:03 114

原创 二维码保存到相册以及识别相册中的二维码-zxing

二维码Zxing相关生成二维码并保存至相册1.保存二维码到相册需要系统“WRITE_EXTERNAL_STORAGE”权限。使用前需先动态申请权限。检测权限接口如下: /** * Determine whether <em>you</em> have been granted a particular permission. * * @...

2019-06-14 17:44:35 4924 1

空空如也

空空如也

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

TA关注的人

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