Skip to content

Commit 362b649

Browse files
committed
update
1 parent 0182aa7 commit 362b649

File tree

3 files changed

+176
-88
lines changed

3 files changed

+176
-88
lines changed

Android/动画.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
## 动画
2+
3+
- [补间动画](#Tween)
4+
- [帧动画](#Frame)
5+
- [属性动画](#Object)
6+
- [触摸反馈动画](#Ripple)
7+
- [揭示动画](#Reveal)
8+
- [转场动画](#)
9+
- [视图状态动画](#)
10+
- [矢量动画](#Vector)
11+
- [约束布局动画](#ConstraintSet)
12+
13+
### <a id="Tween">一、补间动画</a>
14+
15+
对View进行直接操作
16+
17+
#### 位移动画
18+
19+
#### 旋转动画
20+
21+
#### 缩放动画
22+
23+
#### 透明度动画
24+
25+
26+
### <a id="Frame">二、帧动画</a>
27+
28+
多组图片按序加载的动画,需要消耗比较大的内存,大图容易OOM
29+
30+
### <a id="Object">三、属性动画</a>
31+
32+
不局限于View上,基于值动画
33+
34+
### <a id="Ripple">四、触摸反馈动画</a>
35+
36+
37+
38+
### <a id="Reveal">五、揭示动画</a>
39+
40+
41+
42+
### <a id="">六、转场动画</a>
43+
44+
45+
46+
### <a id="">七、视图状态动画</a>
47+
48+
49+
50+
### <a id="Vector">八、矢量动画</a>
51+
52+
53+
54+
### <a id="ConstraintSet">九、约束布局动画</a>
55+
56+
57+

Android/小贴士.md

Lines changed: 119 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,110 @@
1-
## 小贴士
1+
# 小贴士
2+
3+
## 引用传递
4+
5+
Java中方法的形参,8大基本类型(byte,char,short,int,long,float,double,boolean)和string为**值传递**,其余类型为内存地址的**引用传递**,注意在Android中的Adapter无法更新集合,以及浅拷贝和深拷贝的问题
6+
7+
## RecyclerView动画
8+
9+
条目动画错乱的解决方案,要支持静态动画和动态动画,并且监听动画的开始于结束,通过Map对动画条目进行记录,在onBindHolder中判断静态开启或者不开启
10+
11+
## RecyclerView白光一闪的动画
12+
13+
`public Object getChangePayload()` 这个方法返回不为null的话,on Change采用Partial bind,就不会出现。 反之就有,因此 `notifyItemChanged` 额外传入一个 `new Object()` 即可取消动画
14+
15+
## IM软键盘跳闪问题
16+
17+
由于Android没有原生的软键盘状态的监听器,以及软键盘的显示与聊天面板的Visibilty不同步问题,通过监听根布局的 `onMeasure` 方法,监听高度的变化,通过观察者模式暴露给外部来监听软键盘的状态
18+
19+
## 字体sp
20+
21+
布局宽高固定写死的地方应该统一用dp显示字体,因为一旦用户在设置中调大字体,sp的话宽高写死的话,布局显示就乱了,也可以设置成不随系统设置改变而改变,在BaseActivity中重写以下方法:
22+
23+
```
24+
@Override
25+
public Resources getResources() {
26+
Resources res = super.getResources();
27+
Configuration configuration = res.getConfiguration();
28+
if (configuration.fontScale != 1.0f) {
29+
configuration.fontScale = 1.0f;
30+
res.updateConfiguration(configuration, res.getDisplayMetrics());
31+
}
32+
return res;
33+
}
34+
```
35+
36+
## [Androidswipelayout](https://github.com/daimajia/AndroidSwipeLayout)
37+
38+
在部分机型上会难以拖拽,并且自动收回
39+
40+
41+
[Issue](https://github.com/daimajia/AndroidSwipeLayout/issues/412)
42+
43+
最后采用自定义viewgroup,通过ViewDragHelper来实现简易的拖拽,需注意在ViewPager场景下的滑动冲突
44+
45+
## clipChildren
46+
47+
在某些Android版本下,会出现一闪一闪的Bug,需要禁用硬件加速`android:layerType="none"`
48+
49+
## Double计算
50+
51+
浮点类计算时会有不精确的误差,用`BigDecimal`来做加`add`,减`subtract`,乘`multiply`,除`divide`的精确计算
52+
53+
## 详情页面
54+
55+
进入详情页面尽可能只传入ID,在详情页面中尽可能不要携带非ID数据,防止项目切换H5时高额的维护成本
56+
57+
## WebView 清理历史记录失效
58+
59+
重写**WebViewClient****doUpdateVisitedHistory**方法,在里面调用WebView的**clearHistory**方法清理一次历史记录
60+
61+
## 性能优化之启动耗时
62+
63+
Debug版本测试冷启动的时间会不准确,测量Release版本
64+
65+
## 弱引用
66+
67+
实例化匿名内部类会导致弱引用的指向不绑定类的生命周期,gc时就回收,推荐通过类实现接口的方式
68+
69+
## EditText
70+
71+
Java代码设置InputType时,设置密码需要拼接此类属性,不然无效`setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT)`
72+
并且需要重新定义字体`setTypeface(Typeface.DEFAULT)`,不然密码字体会发生变化
73+
74+
## Drawable
75+
76+
Android5.0以下获取SVG的Drawable,通过`ContextCompat#getDrawable`方法,传入的Context需要来自Activity,或者通过`AppCompatResources#getDrawable`来获取
77+
78+
## RxJava
79+
80+
自定义Observable create时,发射数据前,对`ObservableEmitter`校验是否Disposed,避免onComplete之后发送onError事件
81+
82+
联想搜索时,网络抛出异常错误时会接触订阅关系onDispose,故在转换的事件流中调用onErrorResumeNext发送一个事件
83+
84+
## 适配全面屏
85+
86+
```
87+
<meta-data
88+
android:name="android.notch_support"
89+
android:value="true " />
90+
<meta-data
91+
android:name="android.max_aspect"
92+
android:value="1075419520.000000" />
93+
<meta-data
94+
android:name="android.vendor.full_screen"
95+
android:value="true" />
96+
```
97+
98+
99+
## 过滤WebView的广告
2100

3101
```
4102
findViewById(Window.ID_ANDROID_CONTENT).findViewsWithText(outputList,"",View.FIND_VIEWS_WITH_TEXT)
5103
```
6104
可以遍历到TextView中的文本,可用于清理腾讯X5内核中WebView弹出的广告
7105

8-
---
9106

10-
自定义属性时的多类型取值
107+
## 自定义属性时的多类型取值
11108
```
12109
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.);
13110
TypedValue value = new TypedValue();
@@ -46,4 +143,22 @@ if (has) {
46143
//未传入
47144
}
48145
array.recycle();
49-
```
146+
```
147+
148+
### 单Actviity多Fragment架构
149+
150+
优点:
151+
- 页面切换更加轻量级
152+
- 中低端机占用更少的资源
153+
- 可以在一定程度上实现UI加载慢的问题,譬如Splash在加载的时候,Main就开始渲染
154+
- 实现多页面悬浮窗不需要权限
155+
- 页面最小化实现起来更简单
156+
- 热更新没有太大限制(不需要在AndroidManifest注册)
157+
158+
缺点:
159+
- 相互切换、事件传递较为复杂,尤其在多层Fragment嵌套的场景下
160+
161+
162+
163+
164+

坑.md

Lines changed: 0 additions & 84 deletions
This file was deleted.

0 commit comments

Comments
 (0)