在开发中,我们可能会碰到各种个恶心人的问题,这里记录一下,方便查看
目录:
- canves 绘制点九图被拉伸,点九不起作用
- ScrollView 嵌套 RecyclerView 惯性滑动失败
- 避免重复吐司 ( Toast ) 时,显示时间过长
canves 绘制点九图
点九图本质上也是一个 SVG 矢量图,要不她怎么能自由缩放呢
一般我们都是这样些的:
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bubble);
Rect rect = new Rect(l, t, r, b);
canvas.drawBitmap(bitmap, null, rect, new Paint());
然后我们可以看到是这样的,这样就是去了我们制作点九图的初衷了
上面我说了,点九图就是一个 SVG矢量图,那么我们就用path 来画
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bubble);
NinePatch ninePatch = new NinePatch(bitmap, bitmap.getNinePatchChunk(), null);
RectF rectF = new RectF(l, t, r, b);
ninePatch.draw(canvas, rectF);
然后我们就可以看到一切正常,和我们摄像的一样了
ScrollView 嵌套 RecyclerView 惯性滑动失败
这个问题基本上每个人都会碰到,解决的方式有很多,但是核心的原理就是让RecyclerView不滑动,因为RecyclerView是强制父控件把点击事件传递给他的。今天看到一个简单的实现,发到这里大伙看一下:
源地址
避免重复吐司 ( Toast ) 时,显示时间过长
基本上工作一段时间的人都知道,测试一定会给你提这个 bug,这个问题也是必须解决的,贴一个实现,其实写法很多,本质一样,维护一个全局 的静态的 toast 对象,点后一直操作这个对象
public void showToast(Context context, String text, boolean isLongLength) {
int length;
if (isLongLength) {
length = Toast.LENGTH_LONG;
} else {
length = Toast.LENGTH_SHORT;
}
if (toast == null) {
toast = Toast.makeText(context, text, length);
} else {
toast.setText(text);
toast.setDuration(length);
}
toast.show();
}