自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (3)
  • 收藏
  • 关注

原创 记为什么在子线程中 Toast.makeText 会报错?

下面是okhttp的一个简单的异步调用,onResponse 是在子线程中回调的,使用Toast弹出消息时抛出异常Can't toast on a thread that has not called Looper.prepare()OkHttpClient okHttpClient=new OkHttpClient.Builder().build();Request request=new Request.Builder().url("https://www.jianshu.com/p/b1e631

2020-07-15 15:59:20 1004

原创 AndroidUI绘制流程及原理

一 布局加载 setContentView(R.layout.layout);我们平时写好Layout布局,只需调用 setContentView(R.layout.layout);这个方法就可以把写的页面显示在屏幕上,那么这个方法背后到底做了些什么了?我们看看源码,定位到 setContentView这个方法的源码定位到Activity的setContentView方法中getWindow().setContentView(layoutResID);通过调用 getWindow().setC

2020-07-14 17:01:36 405

原创 EventBus3.0-介绍与正确使用

EventBus是什么?EventBus我们使用最多的就是用它来传递参数 例如 从 A页面 传递到B页面,它可以传递一个复杂的对象过去,比我们传统的事件传递更有优势,那么传统的事件传递有那些了?使用场景EventBus可以在任意地方订阅,任意地方发布和任意地方消费以上就是EventBus的一个官方架构图,发布者发布一个 event 事件,然后通过订阅者来匹配,它匹配的唯一方式就是 ...

2020-01-16 13:32:13 308

原创 Handler+ Message 源码分析及手写实现 二

上图 消息机制整个运作过程在真实项目当中,其实Handler用得更多的是下面这种写法,子线程中更新UI从这张图可以看出 无论是 post方法 sendMessage方法 sendEmptyMessageAtTime方法 发送消息最终都是调用了 enqueueMessage方法,存入消息队列当中当消息放入消息队列中,是通过Looper.loop();方法 启动轮询机制不断的取出消息进...

2019-11-25 16:59:03 143

原创 Handler+ Message 源码分析及手写实现 一

什么是Handler?抛出三个问题1 handler内存泄漏?2 handler为什么不能在子线程中 new 出来?3 new Handler() 两种写法的区别1 handler内存泄漏?通过代码分析在 MainActivity 中创建 Handler对象,当收到消息后 就跳转到另外一个 PersonActivitypublic Handler handler = new H...

2019-11-25 15:25:16 192

原创 MVP思想精髓与解耦

mvp在mvc中 control 指的是 activity在 mvp 中 Activity 仅仅表示的是View层而已 Activity 已变得简单了 所有逻辑交给 P层或者M层去实现在mvp中 业务逻辑在P层或者在M层没有绝对的标准,在谷歌的官方文档demo中,业务是在P层实现,但是我们在实际开发中,常常放在M层实现View 与 Model 层 完全分离如果需要解耦 Vie...

2019-11-14 14:07:19 387

原创 MVC架构设计与经典三层模型

在android当中,mvc具体怎么对应关系了m 对应的 android javaBeanv 对应的是 android中布局layout.xmlc 对应的是 android中的 ActivityMVC弊端1 依赖关系紧密,耦合度高,可维护性不强2 容易造成内存泄漏,我们先写个demo来看看,demo很简单,界面上一个按钮,一个imageview,点击按钮从网...

2019-11-14 13:14:37 206

原创 AOP面向切面架构设计-集中式登录架构设计

需求分析我们现在有这么一个需求,页面有几个button按钮,如果没有登录的话,就跳转到登录页面,已经登录的话,就跳转各自对应的页面,在传统的OOP思想里,我们采取的方式 从 SharedPreferences 取出 isLogin,判断是否微 true,在进行相应的跳转,但是在AOP的思想里,我们可以面向全局进行登录切面AspectJ ? 它是一个面向切面编程的框架传统我们把 java ...

2019-11-12 15:31:37 348

原创 AOP面向切面-动态代理

AOPAOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming),面向对象编程的补充和完善。它是通过预编译的方式和运行时动态代理来实现程序的功能,统一维护的一种技术,是我们软件开发的热度和重点,它是编程延伸的一种范式,Aop 它可以对我们业务逻辑 各个部分 进行分离 ,从而使我们各个业务间的耦合度大...

2019-11-11 14:54:06 384

原创 事件分发模型

2019-10-14 15:40:31 165

原创 View事件分发

继续上一片ViewGroup事件分发,我们看看view的事件分发机制 private boolean dispatchTransformedTouchEvent(MotionEvent event, boolean cancel, View child, int desiredPointerIdBits) { final boolean handled; // ...

2019-10-14 15:37:00 111

原创 ViewGroup事件分发机制详解

事件的定义?定义:当用户触摸屏幕时,将产生触摸行为(Touch事件)事件的类型?四种:1 MotionEvent.ACTION_DOWN2 MotionEvent.ACTION_ACTION_MOVE3 MotionEvent.ACTION_ACTION_UP4 MotionEvent.ACTION_CANCEL事件序列事件分发的主要方法?主要有三个方法接下来我们从源码的...

2019-10-14 13:45:28 460

原创 FFmpeg命令详解

1 下载ffmpeghttps://ffmpeg.zeranoe.com/builds/下载Windows版本便于操作熟悉命令下载完成后解压,进入bin文件夹其中 ffmpeg.exe 主要实现的是音视频编解码,视频编辑等功能,ffplay.exe主要实现播放的功能 ,这两个.exe文件都不能直接鼠标点击打开,需要使用命令,使用之前需要配置环境变量2 FFmpeg 录频命令执...

2019-09-02 14:15:07 983

原创 CMakeLists.txt 语法

接下来 在AndroidStudio 上新建一个项目,选择C++项目,等待项目初始化完成构建完成后,我们可以看到 在main这个目录下多了cpp这个文件夹,CMakeLists.txt 便是系统为我们默认创建好的Cmake 注释单行注释 # 注释类容 多行注释 #[[ 多行注释 多行注释 ]]Cmake 变量的定义与使用cmake中所有...

2019-08-15 14:16:37 695

原创 Shell脚本编写与执行编译ffmpeg库

FFmpeg是什么?ffmpeg是一套可以用来记录,转换数字音频,视频,并能将其转换为流的开源计算机程序ffmpeg 是一个对媒体视频处理工具,有非常强大的功能包括视频采集,视频格式转换,视频抓图,给视频加水印等ffmpeg是由c写的一套通用平台开源程序,可应用于windows平台,android平台,ios平台等,国内做音视频的公司基本上都会用到它Android平台如何使用1 ffmp...

2019-08-14 14:02:17 836

原创 Android 出入场动画

Android5.0之前要修改页面转场动画,只能去写一些view动画,然后通过overridePendingTransition方法设置进去。Android5.0之后Activity的出入场动画总体上来说可以分为两种,一种就是分解、滑动进入、淡入淡出,另外一种就是共享元素动画,1共享元素转场动画这是什么意思了?ActivityA的界面有一个ImageView’并为它设置了背景图片,现在我们要跳...

2019-07-12 11:05:41 2408

原创 Material Design CoordinatorLayout+AppBarLayout+Toolbar+CollapsingToolbarLayout

先来看看我们要做的效果这种效果我们使用 CoordinatorLayout+AppBarLayout+Toolbar+CollapsingToolbarLayout就可以把它实现出来前面一片 我们已经分析了 CoordinatorLayout+AppBarLayout+Toolba 的使用,现在我们再加上一个CollapsingToolbarLayout 折叠的效果,就可以完成上面的效果了...

2019-07-11 17:47:23 400

原创 Material Design CoordinatorLayout+AppBarLayout+Toolbar

1.CoordinatorLayout 简介CoordinatorLayout遵循Material 风格,包含在 support Library中,结合AppbarLayout, CollapsingToolbarLayout等 可 产生各种炫酷的折叠悬浮效果它作为最上层的View它作为一个 容器与一个或者多个子View进行交互2.AppBarLayout它是继承与LinearLayo...

2019-07-11 14:37:05 421

原创 Material Design Toolbar 结合 DrawerLayout侧滑菜单

先看看效果图Material Design Toolbar 结合 DrawerLayout侧滑菜单直接上代码xml布局文件<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.an...

2019-07-10 15:24:02 116

原创 Material Design Toolbar

Material Design 是谷歌公司提出的一套界面设计规范,使用它的相应主题就能得到相对应的Material Design风格Material主题有三种两种兼容主题 兼容主题都在 com.android.support:appcompat-v7:28.0.0 各个版本V7包下面我们一般使用兼容主题Theme.AppCompat.Light.DarkActionBar新建一个...

2019-07-10 14:28:05 245

原创 修改系统density densityDpi 做屏幕适配

我们先来复习一下 Android中 dp dpi px 它们之间的关系?dp:设备独立像素值 也就是我们在布局文件中 自己定义的 但是最终也会由系统根据一定的比值转换成 px,这是由谷歌帮我们做的适配,使用 dp值dpi:手机屏幕每英寸所包含像素点的数量 那么这个dpi是怎么求得了? 接下来我们回来把它求出来的px:像素点,假如手机的分辨率是 720*1280 那么手机横向排列的像素点 总共...

2019-07-09 17:14:35 6798

原创 PathMeasure3 自定义view

先看看效果图小箭头绕着圆不断的改变角度进行旋转下面直接贴代码吧 有详细的注释public class PathMeasureView extends View{ private Paint mPaint = new Paint(); private Paint mLinePaint = new Paint(); private Bitmap mBitmap; ...

2019-07-09 11:03:40 61

原创 PathMeasure 自定义view 好看的加载效果

根据上一篇PathMeasure的介绍,我们来实现一个好看的 加载效果直接贴代码public class PathMeasureView extends View{ private Paint mPaint = new Paint(); private Paint mLinePaint = new Paint(); //坐标系 private Bitmap mBit...

2019-07-09 09:47:24 111

原创 PathMeasure 基础

PathMeasure是一个用来测量Path的类1. 构造方法(1)无参构造函数 PathMeasure() 用这个构造函数可创建一个空的 PathMeasure,但是使用之前需要先调用 setPath 方法来与 Path 进行关联。 被关联的 Path 必须是已经创建好的,如果关联之后 Path 内容进行了更改,则需要使用 setPath 方法重新关联。我们创建一个PathM...

2019-07-05 15:13:23 173

原创 Layout的加载流程及手写百分比布局

百分比布局其实谷歌为开发者提供了 PercentRelativeLayout 百分比布局,它继承自RelativeLayout下面我们就来简单使用它在build.gradle中引用implementation 'com.android.support:percent:28.0.0'在布局文件中使用它<?xml version="1.0" encoding="utf-8"?&gt...

2019-07-04 15:03:28 448

原创 自定义像素适配

自定义View像素适配当我们在手机屏幕上显示一个View 是,往往最为纠结的是它是否在不同的屏幕上显示的尺寸都一样了,不如UI小姐姐给我的参考尺寸是 720*1208 需要显示屏幕宽度的一半 360px那么现在在1080*1920 的屏幕上 如果还是显示360px的画,就只会显示屏幕宽度的三分之一,但是根据需求,我们需要显示一半540px才对那么我们怎么才能根据参考尺寸来计算我们不同手...

2019-07-03 13:57:21 494

原创 自定义View绘制谷歌 图标

自定义View自定义控件 绘制谷歌 图标第一步第二步直接上代码,看看绘制出来的第一个部分再通过旋转,绘制其它两个部分绘制颜色和中间的小圆为各个色值添加点击事件自定义控件 绘制谷歌 图标当我们第一次看到这种图标是,第一反映就是这怎么绘制啊?赶紧要UI小姐姐切个图算了,但是除了切图,其实我们还可以通过代码的方式完全绘制出来,下面我们就来分析一下,具体怎么绘制?如上图所示,这个图标其实就是分为...

2019-07-01 14:11:19 350

Android锁屏无法继续定位问题

Android锁屏无法继续定位问题 产生问题的原因: 手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会将手机进入休眠状态。此时的服务以及线程等都会停止。 最近就这个问题,阅读了很多代码以及官方文档,下面就说下最近都尝试过的方式,可能其中有些您实现了,我这边没实现,望见谅。本文采用的高德定位。 一、PowerManager.WakeLock (1)直接强制当前页面cpu运行 private PowerManager pm; private PowerManager.WakeLock wakeLock; @Override public void onCreate() { super.onCreate(); //创建PowerManager对象 pm = (PowerManager) getSystemService(Context.POWER_SERVICE); //保持cpu一直运行,不管屏幕是否黑屏 wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "CPUKeepRunning"); wakeLock.acquire(); } @Override public void onDestroy() { wakeLock.release(); super.onDestroy(); } 这个写法我表示并没有什么用,并不能强制cpu持续运行。 (2)WakefulBroadcastReceiver public class WLWakefulReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // String extra = intent.getStringExtra("msg"); Intent serviceIntent = new Intent(context, MyIntentService.class); serviceIntent.putExtra("msg", extra); startWakefulService(context, serviceIntent); } } WakefulBroadcastReceiver 内部的原理也是PowerManager,注册广播时8.0的请动态注册,静态没有用。广播注册完了之后,写一个服务用来与广播互动。 public class MyIntentService extends IntentService { public MyIntentService() { super("MyIntentService"); } @Override public void onCreate() { super.onCreate(); } @Override protected void onHandleIntent(@Nullable final Intent intent) { //子线程中执行 Log.i("MyIntentService", "onHandleIntent"); String extra = intent.getStringExtra("msg"); new Thread(new Runnable() { @Override public void run() { Loca

2019-04-04

AndroidFlingSlide.ra

btn topmenu right setOnClickListener new OnClickListener {

2014-01-06

listviewddd

page2 setImageDrawable getResources getDrawable R drawable page focused ; page1 setImageDrawable getResources getDrawable R drawable page unfocused ; page0 setImageDrawable getResources getDrawable R drawable page unfocused ;

2014-01-06

空空如也

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

TA关注的人

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