抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

Android 3月填坑手札

多语言:应用设置语言后获取到的资源错误

描述:应用内有一套语言覆盖逻辑,在应用内切换语言后,发现某些位置并未获取到需要的资源。

背景:发生在华为手机上,系统语言为中文,应用内覆写为英文,获取到的string却依旧是中文。

解决办法:将获取资源的context由application的context类型换为activity的context类型。原因猜测是因为application生命周期最长,华为对逻辑做了改动导致,毕竟其他手机并不会。

参考:https://blog.csdn.net/GerryRun/article/details/103703264

Viewpager手势冲突问题

背景:一般来说,如果是用的框架或者库什么的不会有什么问题,可我有时候喜欢自己写。需求是这样:全屏的viewpager,上层盖一个类似toolbar的下拉栏。伪代码:

<FrameLayout>
<ViewPager match_parent match_parent />
<CustomDragView/>
</FrameLayout>

于是发生滑动冲突,按照FrameLayout的绘制顺序,事件先传递给CustomDragView,再传给ViewPager,这样在ViewPager滑动前就已经由CustomDragView响应了拖拽事件,从而无法在ViewPager滑动时不响应CustomDragView拖拽事件。

解决办法:伪代码:

<FrameLayout>
<CustomDragView/>
<ViewPager match_parent match_parent />
</FrameLayout>

这样即可,因为ViewPager设定为全屏,此时会先交由ViewPager进行处理触摸事件,若ViewPager拦截了,CustomDragView也就不必再做处理了。

参考:https://blog.csdn.net/jianesrq0724/article/details/75128108

Android 6种屏幕位置的获取

最近很多动画手势都涉及到view位置的变更,对于这类计算,一开始就需要获取到view的原始位置,这里有篇文章写得很好,就不搬了。

然后就是一系列对于速度位置的变更了。

参考:https://juejin.im/entry/5dae45f8f265da5ba46f6106

Android TextView 行距 间距

间距:android:letterSpacing

行距:android:lineSpacingExtra

仅记录下,对应代码也有set方法,网上很多。弊端也有,就是需要UI调整,有时候数值并不是UI想要的数值。

参考:https://blog.csdn.net/ccpat/article/details/45507751

Android判断点是否在view内

上代码吧,获取时机大家都知道,用post,绘制完成后处理。

fun View.calcViewScreenLocation(): Rect {
val location = IntArray(2)
// 获取控件在屏幕中的位置,返回的数组分别为控件左顶点的 x、y 的值
getLocationOnScreen(location)
return Rect(location[0], location[1], location[0] + width,
location[1] + height);
}

fun View.containPoint(pointX: Int, pointY: Int): Boolean {
return calcViewScreenLocation().contains(pointX, pointY)
}

传入手指点击坐标即可。event.rawX, event.rawY

参考:https://www.jianshu.com/p/3d7a86dc79b6


0条评论

发表评论