- 博客(24)
- 收藏
- 关注
原创 ViewModel实现原理
ViewModel复用,实际是ViewModelStore的复用;ViewModelStore使用HashMap存取了ViewModel对象大概如下图所示:
2021-07-17 10:39:15 260 1
原创 沉浸式实现步骤笔记
在values、values-v19、values-v21的style.xml都设置一个 Translucent System Bar 风格的Themevalues<style name="TranslucentTheme" parent="MaterialAppTheme"> <item name="windowNoTitle">true</item> </style> <style name="Materia.
2020-12-05 16:05:32 225
原创 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 306
原创 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 295
原创 多点触控
View的事件序列:ACTION_DOWN - ACTION_MOVE - ACTION_UP(ACTION_CANCEL)ACTION_DOWN - ACTION_POINTER_DOWN - ACTION_MOVE - ACTION_POINTER_UP - ACTION_UPPointerId对于每个按下的点是不变的event.getPointerId(index)PointerIndex会随着手指按下与抬起发声改变每次按下手指,就让新手指接管事件当抬起手指为
2020-11-09 11:54:24 259 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 3227 1
原创 MotionLayout中与动画有关设置
MotionLayout属性定义:[ … ] 指定位置[ …] 指定属性<KeyPositionmotion:motionTarget="@id/targetPath" //运动视图motion:framePosition=“percentage” //1 到 99 之间的整数,何时到达此指定点motion:keyPositionType="type“ //指定如何解释 percentX 和 percentY 值,motion:percentX=“xOffset
2020-09-13 11:12:41 337
原创 Toast在部分厂家手机上会显示APP名称解决方法
Toast显示APP名称解决过程:接客户反馈在Toast中会显示APP的名称,需要删除;从网上找到解决方法将创建修改为: Toast toast = Toast.makeText(getContext(), "", Toast.LENGTH_SHORT); toast.setText("显示内容"); toast.show();测试后觉得没有问题,发给客户确认...
2020-04-30 10:41:44 701
原创 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 432
原创 RecyclerView回收复用实现学习笔记
今天继续启舰的自定义控件三部曲视图篇(八)——RecyclerView系列之五回收复用实现方式二的学习,记录下自己的理解。自定义控件三部曲视图篇(八)——RecyclerView系列之五回收复用实现方式二直接Copy实现原理:在这里,我们主要替换掉在上节中移动item所用的offsetChildrenVertical(-travel);函数,既然要将它弃用,那我们就只能自己布局每个item了...
2020-02-24 14:54:37 536
原创 RecyclerView实现回收复用学习笔记
学习启舰的自定义控件三部曲视图篇(七)——RecyclerView系列之四实现回收复用,记录一下自己的理解,方便以后复习查看。回收复用主要有两部分:(直接copy)第一:在onLayoutChildren初始布局时:使用 detachAndScrapAttachedViews(recycler)将所有的可见HolderView剥离一屏中能放几个item就获取几个HolderView,撑满初...
2020-02-22 21:24:41 1370
原创 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 520
原创 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 455
原创 CoordinatorLayout + Behavior + NestedScrollView联动原理解析
CoordinatorLayout中重写了generateLayoutParams方法,返回LayoutParams;@Override public LayoutParams generateLayoutParams(AttributeSet attrs) { return new LayoutParams(getContext(), attrs); }...
2020-02-18 15:50:01 728
原创 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 207
原创 状态模式学习笔记
定义:当一个对象的内在状态发生改变时,允许改变其行为。其UML图如下:Context:环境类,定义客户感兴趣的接口,维护一个State子类的实例,这个实例定义了对象的当前状态。State:抽象状态类或接口,定义一个或一组接口,表示该状态下的行为;ConstreteStateA与ConstreteStateB:具体状态类,实现了抽象状态类的接口,从而达到了不同状态下的不同行为。已登录为例...
2019-12-31 15:53:06 174
原创 ArgbEvaluator的使用
功能:计算颜色渐变的类。构造函数:ArgbEvaluator();方法:Object evaluate(float fraction, Object startValue, Object endValue)参数fraction,取值为0.0f ~ 1.0f,表示从开始颜色到结束颜色的比重;参数startValue:开始颜色参数endValue:结束颜色返回值:返回表示中间颜色的整数例...
2019-12-10 09:08:26 645
原创 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 191
原创 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 233
原创 ViewPager.PageTransformer学习笔记
对于安卓官网的PageTransformer实例,看了很久,终于明白了一点,并记录于此首先对于ViewPager的使用分为三步1.在Activity的布局文件中加入ViewPager;2.创建一个类,继承自FragmentStatePagerAdapter,并实现getItem()与getCount()方法;3.将Adapter与ViewPager绑定;对于ViewPager之间切换使用...
2019-08-16 17:17:56 277
原创 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 380
原创 蓝牙开发学习笔记
设置蓝牙1.获取BluetoothAdapter(自身蓝牙适配器)BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getdefaultAdapter();if (mBluetoothAdapter == null){ //表示手机不支持蓝牙;}2.启用蓝牙//如果手机蓝牙没有打开,就会跳转到手机系统蓝牙界面if ...
2019-08-08 10:12:42 356
原创 蓝牙音箱音频输出切换
蓝牙音箱音频输出切换问题:蓝牙音箱APP开发,当将蓝牙音箱切换到其他音源(U盘或TF卡)播放的时候,早成手机播放的声音即不在手机端出来,同时在音箱端也没有声音,通过以下强制切换手机端音频输出解决问题!AudioManager mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);...
2019-07-20 16:51:41 4211
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人