![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android
凌晨三点的北京
行到水穷处 坐看云起时
展开
-
android 键盘偶现收起之后又弹出
现象:应用首次安装,点击搜索。弹起键盘。退出应用,键盘收起又弹出原因:可能是使用了toggleSoftInput方法导致的,show和hide要成对使用,官方不建议使用toggleSoftInput。解决方案:原创 2022-06-14 11:05:27 · 774 阅读 · 2 评论 -
Android 使用Retrofit 表单 上传多张图片
Android 使用Retrofit 表单 上传多张图片1.ApiService接口声明方法1.1 headers 里面可以添加业务自己的header参数@Multipart@POST("api/uploadPic")fun uploadFiles(@HeaderMap headers: HashMap<String, String?>@Part parts: List<MultipartBody.Part>): Call<UploadResponse>原创 2022-05-24 22:19:52 · 941 阅读 · 0 评论 -
android沉浸式状态栏实现
android沉浸式状态栏实现:public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {原创 2022-05-10 16:57:53 · 271 阅读 · 0 评论 -
Android跳转跳到打开百度地图、高德地图等第三方地图骑行导航
1.高德骑行导航:https://lbs.amap.com/api/amap-mobile/guide/ios/ride-navi示例代码: // 调用高德地图电车骑行导航 //电车elebike 1小时32 //自行车bike 2小时2分 val it = Intent() it.data = Uri.parse("amapuri://openFeat原创 2022-05-10 10:31:15 · 628 阅读 · 0 评论 -
Android之提示Could not find com.android.support:appcompat-v7:25.3.1
buildscript { repositories { maven { url "https://maven.google.com" }//添加这个就可以 jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.1' classpath 'com.novoda:bintray-release:0.3.4' //原创 2022-04-29 19:29:26 · 1771 阅读 · 0 评论 -
Android Studio 去掉导包 *
原创 2021-08-31 11:47:39 · 343 阅读 · 0 评论 -
Android多行多列的ViewGroup
先看下效果图每行两个子孩子每行一个子孩子实现思路自定义viewGroup,实现测量和布局,使控件适应业务场景。测量根据父控件的宽度,平均分给每个子孩子固定的宽度。高度就是行数乘以一个子孩子的高度,再加上空隙的高度。根据子孩子个数计算行数 val rows = if (childCount % perLineChild == 0) { childCount / perLineChild } else { chil原创 2021-08-31 10:22:32 · 213 阅读 · 0 评论 -
view#post和Handler#psot区别
v.post { } Handler().post { }View#post方法源码业务场景:当我们在activity#onCreate或是在fragment#onViewCreated方法中直接获取view的宽高为0,为什么?根据View视图的绘制流程,view的宽高只有在测量之后才能获取到,而view的测量是在activityThread的handleResumeActivity方法中,通过创建ViewRootImp,把DecoreView和Coneten...原创 2021-01-29 17:35:13 · 419 阅读 · 0 评论 -
Android 性能优化
如何发现问题Android:通过systrace进行性能分析原创 2021-01-17 10:38:35 · 65 阅读 · 0 评论 -
实现添加view 同时伴随移除view动画的效果的自定义ViewGroup
整体代码/** * @author * @desc : 支持添加view 伴随动画的效果 * */class AnimViewGroup(context: Context, attrs: AttributeSet?) : FrameLayout(context, attrs) { /** * 缓存一个view 为了复用 */ var cacheScrapView: View? = null private set private v原创 2020-11-20 18:18:55 · 635 阅读 · 0 评论 -
android 屏幕常亮控制
控制屏幕常亮不熄灭方式1代码里调用val pm = context!!.getSystemService(Context.POWER_SERVICE) as PowerManagerval wakeLock = pm.newWakeLock( PowerManager.FULL_WAKE_LOCK or PowerManager.ACQUIRE_CAUSES_WAKEUP, "" )wakeLock.acquire()原创 2020-09-12 15:39:01 · 239 阅读 · 0 评论 -
Android 消息机制
主线程Looper创建的位置ActivityThread的main方法中,也就是消息机制开始建立的地方 Looper.prepareMainLooper(); // Find the value for {@link #PROC_START_SEQ_IDENT} if provided on the command line. // It will be in the format "seq=114" long startSeq = 0;原创 2020-09-11 16:05:16 · 57 阅读 · 0 评论 -
Android 属性动画
属性动画ViewPropertyAnimator imageView.animate() .translationX(200.dp) .translationY(100.dp) .scaleX(2f) .scaleY(2f) .alpha(0.5f) .setStartDelay(1000)缺点:有局限性,只能改变其中的几个属性,横向纵向 渐变旋转比如原创 2020-09-07 15:07:37 · 144 阅读 · 0 评论 -
自定义View之SportView
private val SPORT_RADIUS = 150.dpclass SportView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : View(context, attrs, defStyleAttr) { private val mPaint = Paint(Paint.ANTI_ALIAS_FLAG) pri原创 2020-09-03 14:56:02 · 138 阅读 · 0 评论 -
利用反射简单实现类似Butterknife
lib-refrection/** * @author : zyl * @desc : */public class Binding { public static void bind(Activity activity) { for (Field field : activity.getClass().getDeclaredFields()) { BindView bindView = field.getAnnotation(BindView.c原创 2020-07-30 11:31:16 · 147 阅读 · 0 评论 -
Android图片加载内存优化
利用BitmapFactory.Options实现图片内存优化首先准备了一张1280x800的blue_bg.png图片,我们知道这张图片加载到内存默认占用的大小是1280x800x4 = 4096000byte Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.blue_bg);// 默认情况下 BitmapFactory 使用 Bitmap.Config.ARGB_8888 的存储方式原创 2020-06-01 17:19:45 · 404 阅读 · 0 评论 -
Messenger实现进程间通信
Messenger实现进程间通信为什么Messenger能进行进程间通信使用Messenger如何实现进程间通信Messenger工作原理图总结Thanks为什么Messenger能进行进程间通信Messenger翻译为信使,他可以在不同的进程中传递Message对象首先我们看下这个类的构造方法,发现,他的底层实现其实就是AIDL。 /** * Create a new Messenger pointing to the given Handler. Any Message原创 2020-05-19 12:02:52 · 422 阅读 · 0 评论 -
聊聊自定义View那些事
聊聊自定义View那些事为什么要自定义View如何自定义View为什么要重写onMeasure方法如何重写onMeasure方法总结为什么要自定义View为了实现某些炫酷的动画和效果。为了优化应用性能。系统控件满足不了需要如何自定义View继承系统View,实现相应的构造方法public class CircleView extends View { private Paint mPaint; private float cx; private float原创 2020-05-13 22:28:31 · 133 阅读 · 0 评论 -
Android Handler机制
Android Handler机制handler是如何创建的?handler机制是如何运转的?Android 系统中的Handler是如何应用的?总结handler是如何创建的?我们先在子线程中创建一个handler,代码如下:new Thread(new Runnable() { @Override public void run() {...原创 2020-05-04 21:39:17 · 306 阅读 · 0 评论 -
Android 点击事件分发
Android 点击事件分发Activity中对事件的处理ViewGroup是如何进行事件处理的View的dispatchTouchEvent相当重要,让我们继续look总结Activity中对事件的处理事件分发方法,返回true表示事件被消费掉了public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAct...原创 2020-05-04 11:45:50 · 272 阅读 · 0 评论 -
okHttp源码分析
我们从调用的方式着手,看看代码是怎么走的原创 2020-04-26 09:19:41 · 290 阅读 · 0 评论 -
使用NestedScrollView嵌套RecycleView
使用NestedScrollView嵌套RecycleView使用原因使用过程中的问题记录1.自动滚动问题2.RecycleView复用机制失效问题使用原因项目需要。。。不推荐这么用,原因:链接使用过程中的问题记录xml布局文件如下... <android.support.v4.widget.NestedScrollView android:l...原创 2020-04-17 17:04:10 · 495 阅读 · 0 评论 -
借助profiler和mat进行内存泄露的分析
借助profiler和mat进行内存泄露的分析工具版本模拟内存泄露内存分析使用mat工具进行进一步确认问题与总结工具版本android studio 3.6.1模拟内存泄露建立工程,把下面的自定义view放入项目中,反复进入退出界面package com.enjoy.memory.widget;import android.animation.ValueAnimator;i...原创 2020-04-12 22:15:40 · 377 阅读 · 0 评论 -
借助profiler工具进行内存分析
借助profiler工具和Mat进行内存分析工具说明模拟内存问题场景利用Profiler工具进行内存分析问题解决与总结工具说明android studio 版本3.6.1模拟内存问题场景建立一个新的工程,把下面有问题的自定义VIew,引入到工程里面,最好是写两个activity,把下面自定义view引入到第二个SecondActivity里面,方便测试。public class ...原创 2020-04-11 11:13:43 · 246 阅读 · 0 评论 -
学习自定义Gradle插件
自定义 Gradle 插件首先新建一个项目新建一个module模块,删除无关文件,只需保留main和build.gradle文件即可gradle文件中删除之前默认所有配置,引入如下配置//管理仓库的插件apply plugin: 'maven'//groovy插件apply plugin:'groovy'dependencies { compile gradleApi...原创 2020-04-06 10:47:46 · 316 阅读 · 0 评论