- 博客(24)
- 收藏
- 关注
原创 ViewModel实现原理
ViewModel复用,实际是ViewModelStore的复用; ViewModelStore使用HashMap存取了ViewModel对象 大概如下图所示:
2021-07-17 10:39:15
347
1
原创 沉浸式实现步骤笔记
在values、values-v19、values-v21的style.xml都设置一个 Translucent System Bar 风格的Theme values <style name="TranslucentTheme" parent="MaterialAppTheme"> <item name="windowNoTitle">true</item> </style> <style name="Materia.
2020-12-05 16:05:32
283
原创 ViewDragHelper.CallBack中方法回调
//view是否可以拖动 override fun tryCaptureView(child: View, pointerId: Int): Boolean { return true } //水平方向滑动距离Return the magnitude of a draggable child view's horizontal range of motion in pixels.This method should return 0 for views that c...
2020-11-09 17:00:54
384
原创 OnDragListener事件回调执行时机
override fun onDrag(v: View, event: DragEvent): Boolean { when (event.action) { //开始拖拽 DragEvent.ACTION_DRAG_STARTED -> { Log.i("khs", "onDrag: ACTION_DRAG_STARTED") } //拖拽点进入view的边界内部 DragEvent.AC
2020-11-09 16:36:28
409
原创 多点触控
View的事件序列: ACTION_DOWN - ACTION_MOVE - ACTION_UP(ACTION_CANCEL) ACTION_DOWN - ACTION_POINTER_DOWN - ACTION_MOVE - ACTION_POINTER_UP - ACTION_UP PointerId对于每个按下的点是不变的event.getPointerId(index) PointerIndex会随着手指按下与抬起发声改变 每次按下手指,就让新手指接管事件 当抬起手指为
2020-11-09 11:54:24
341
1
原创 Android 蓝牙扫描与手机位置权限是否打开相关
记录下蓝牙连接与位置权限的问题: 首先,在蓝牙APP开发的时候需要位置权限: <!-- If your app targets Android 9 or lower, you can declare ACCESS_COARSE_LOCATION instead. --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 问题: 有些手机(红米)在设置界面中关掉位置信息,AP
2020-09-29 17:05:29
3567
1
原创 MotionLayout中与动画有关设置
MotionLayout属性定义: [ … ] 指定位置 [ …] 指定属性 <KeyPosition motion:motionTarget="@id/targetPath" //运动视图 motion:framePosition=“percentage” //1 到 99 之间的整数,何时到达此指定点 motion:keyPositionType="type“ //指定如何解释 percentX 和 percentY 值, motion:percentX=“xOffset
2020-09-13 11:12:41
401
原创 Toast在部分厂家手机上会显示APP名称解决方法
Toast显示APP名称解决过程: 接客户反馈在Toast中会显示APP的名称,需要删除; 从网上找到解决方法将创建修改为: Toast toast = Toast.makeText(getContext(), "", Toast.LENGTH_SHORT); toast.setText("显示内容"); toast.show(); 测试后觉得没有问题,发给客户确认...
2020-04-30 10:41:44
846
原创 setContentView()与LayoutInflater.inflate()关系
在Activity中调用setContentView(R.layout.activity_main)方法,就会进入AppCompatActivity中的setContentView(@LayoutRes int layoutResID) public void setContentView(@LayoutRes int layoutResID) { this.getDelegate...
2020-02-27 14:44:26
509
原创 RecyclerView回收复用实现学习笔记
今天继续启舰的自定义控件三部曲视图篇(八)——RecyclerView系列之五回收复用实现方式二的学习,记录下自己的理解。 自定义控件三部曲视图篇(八)——RecyclerView系列之五回收复用实现方式二 直接Copy实现原理: 在这里,我们主要替换掉在上节中移动item所用的offsetChildrenVertical(-travel);函数,既然要将它弃用,那我们就只能自己布局每个item了...
2020-02-24 14:54:37
583
原创 RecyclerView实现回收复用学习笔记
学习启舰的自定义控件三部曲视图篇(七)——RecyclerView系列之四实现回收复用,记录一下自己的理解,方便以后复习查看。 回收复用主要有两部分:(直接copy) 第一:在onLayoutChildren初始布局时: 使用 detachAndScrapAttachedViews(recycler)将所有的可见HolderView剥离 一屏中能放几个item就获取几个HolderView,撑满初...
2020-02-22 21:24:41
1444
原创 Scroller弹性滑动原理
Scroller的典型使用方法: Scroller mScroller = new Scroller(mContext); private void smoothScrollTo(int destX, int destY) { int scrollX = getScrollX(); int scrollY = getScrollY(); int deltaX = dest...
2020-02-20 14:58:59
598
原创 Can not perform this action after onSaveInstanceState:问题分析
问题描述: 当手机进入黑屏的时候,APP蓝牙断开连接,APP收到蓝牙断开连接,通过EventBus方式调用commit方法让UI界面跳转到蓝牙连接界面,此时会报Can not perform this action after onSaveInstanceState:错误,且不会正常跳转到指定界面,从网上找到解决方法是:用commit()替换成commitAllowingState()方法,问题解...
2020-02-20 09:20:51
552
原创 CoordinatorLayout + Behavior + NestedScrollView联动原理解析
CoordinatorLayout中重写了generateLayoutParams方法,返回LayoutParams; @Override public LayoutParams generateLayoutParams(AttributeSet attrs) { return new LayoutParams(getContext(), attrs); } ...
2020-02-18 15:50:01
815
原创 ViewModel学习
**ViewModelProviders.of(this).get(UserModel.class);** 调用of(activity, null); 传入的factory为null @NonNull @MainThread public static ViewModelProvider of(@NonNull FragmentActivity activity) { ...
2020-01-07 10:49:04
258
原创 状态模式学习笔记
定义:当一个对象的内在状态发生改变时,允许改变其行为。 其UML图如下: Context:环境类,定义客户感兴趣的接口,维护一个State子类的实例,这个实例定义了对象的当前状态。 State:抽象状态类或接口,定义一个或一组接口,表示该状态下的行为; ConstreteStateA与ConstreteStateB:具体状态类,实现了抽象状态类的接口,从而达到了不同状态下的不同行为。 已登录为例...
2019-12-31 15:53:06
227
原创 ArgbEvaluator的使用
功能:计算颜色渐变的类。 构造函数:ArgbEvaluator(); 方法:Object evaluate(float fraction, Object startValue, Object endValue) 参数fraction,取值为0.0f ~ 1.0f,表示从开始颜色到结束颜色的比重; 参数startValue:开始颜色 参数endValue:结束颜色 返回值:返回表示中间颜色的整数 例...
2019-12-10 09:08:26
715
原创 TabLayout与ViewPager使用是TabLayout标题不显示
使用如下两步后早餐TabLayout的标题没有显示 mTablayout.addTab(mTablayout.newTab().setText(titles.get(i))); mTablayout.setupWithViewPager(mViewPager); protected void onCreate(Bundle savedInstanceState) { super...
2019-12-06 15:50:53
248
原创 LayoutAnimation动画学习笔记
LayoutAnimation作用于ViewGroup,为ViewGroup指定一个动画,则ViewGroup中的每个子元素都会有相同的动画; 在xml中创建LayoutAnimation如下: <?xml version="1.0" encoding="utf-8"?> <layoutAnimation xmlns:android="http://schemas.android...
2019-08-23 14:01:42
276
原创 ViewPager.PageTransformer学习笔记
对于安卓官网的PageTransformer实例,看了很久,终于明白了一点,并记录于此 首先对于ViewPager的使用分为三步 1.在Activity的布局文件中加入ViewPager; 2.创建一个类,继承自FragmentStatePagerAdapter,并实现getItem()与getCount()方法; 3.将Adapter与ViewPager绑定; 对于ViewPager之间切换使用...
2019-08-16 17:17:56
318
原创 ActivityOptionsCompat 转场动画学习笔记
静态方法 makeCustomAnimation(Context context, int enterResId, int exitResId) makeScaleUpAnimation(View source, int startX, int startY, int startWidth, int startHeight) makeSceneTransitionAnimation(Activit...
2019-08-15 17:33:08
448
原创 蓝牙开发学习笔记
设置蓝牙 1.获取BluetoothAdapter(自身蓝牙适配器) BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getdefaultAdapter(); if (mBluetoothAdapter == null){ //表示手机不支持蓝牙; } 2.启用蓝牙 //如果手机蓝牙没有打开,就会跳转到手机系统蓝牙界面 if ...
2019-08-08 10:12:42
483
原创 蓝牙音箱音频输出切换
蓝牙音箱音频输出切换 问题:蓝牙音箱APP开发,当将蓝牙音箱切换到其他音源(U盘或TF卡)播放的时候,早成手机播放的声音即不在手机端出来,同时在音箱端也没有声音,通过以下强制切换手机端音频输出解决问题! AudioManager mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); ...
2019-07-20 16:51:41
4649
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅