前言
记录在开发之中,用到的小技巧,小配置属性。
本篇主要介绍:
1.动态修改drawable配置的shape颜色。
描述: 如果通过xml 进行绘制的颜色,我们在代码之中使用ColorFilter方法将无法进行动态替换颜色
解决:
GradientDrawable myShape (GradientDrawable)view.getBackground();
myShape.setColor(0xffffff);
优势:colorFilter只有imageview 才有,而该方法 不限制imageView。所有的控件的Drawable 都可以替换。
2.viewPager 在一页之内,显示第二页部分。
描述: 添加的ViewPager的item。但是第二页显示不了
解决:
需要在xml布局之中添加
android:clipChildren="false"
完整例子:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:clipChildren="false"
>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_margin="180dp"
android:clipChildren="false"
android:overScrollMode="never" />
</FrameLayout>
//请注意。margin的值一定要大于下面设置的pageMargin值。否则你看不到效果。
mViewPager.setPageMargin(20);
3.绘制带半圆的按钮
解决:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
android:useLevel="true">
<size
android:width="50dp"
android:height="20dp" />
<solid android:color="@color/menu_bg" />
<!-- 圆角半径是高度的一般就是一个圆弧了 -->
<corners android:radius="100dp" />
</shape>
效果:
4.通过adb 命令快捷启动setting.APP
解决:
//将启动android系统设置界面
adb shell am start-activity -a android.settings.SETTINGS
5.自定义View 和SurfaceView 的区域刷新方法
自定义View 的区域刷新有两个地方需要注意
1.如果在onDraw之中有多个Bitmap对象需要刷新。那么可以采用clipOutRect()方法,将折叠隐藏的区域不进行绘制。
例如:
绘制速度按照先绘制A,再绘制B,最后绘制C
这个时候B会遮挡A的部分区域,C也会遮挡B的部分区域。
这些遮挡区域在View的onDraw方法之中我们可以通过clipOutRect方法给裁剪掉。
这样系统就可以节省部分的重构了。
2.如果只有一个Bitmap 产生了变化,然后重新显示的话,我们可以采用
解决:
//Rect 传递需要更新的区域,这样调用onDraw方法的时候将会只刷新该区域
invalidate(rect)
如果是自定义SurfaceDraw的话,那就更简单了。
//Rect 传递需要更新的区域,这样调用onDraw方法的时候将会只刷新该区域
holder.lockCanvas(rect)
评论区