自定义Drawable
2016-09-29 21:19
316 查看
在Android设计中,Drawable是一个抽象基类,它是所有Drawable对象的基类,每个具体的Drawable都是它的子类。通常没有必要去自定义Drawable,因为自定义Drawable无法再XML中使用,这就降低了自定义Drawable的使用范围。但在某些特殊情况下我们的确想自定义Drawable,这也是可以的。
通过阅读参考源码是一个比较好的学习方式,我们可以参考ShapeDrawable和BitmapDrawable的源码来了解和学习自定义Drawable的实现过程。参考Drawable源码可以得知,要想自定义Drawable必须继承重写Drawable抽象类中的draw、setAlpha、setColorFilter和getOpacity这几个方法,并且这几个方法是必须要实现的。
下面给出一个自定义Drawable的例程来演示自定义Drawable过程。
自定义Drawable
在上面的代码中draw、setAlpha、setColorFilter和getOpacity这几个方法都是必须要实现的,其中draw方法是最主要的方法,这个方法就和VIew的draw方法类似。
MainActivity的代码如下:
例程代码(github)
通过阅读参考源码是一个比较好的学习方式,我们可以参考ShapeDrawable和BitmapDrawable的源码来了解和学习自定义Drawable的实现过程。参考Drawable源码可以得知,要想自定义Drawable必须继承重写Drawable抽象类中的draw、setAlpha、setColorFilter和getOpacity这几个方法,并且这几个方法是必须要实现的。
下面给出一个自定义Drawable的例程来演示自定义Drawable过程。
自定义Drawable
package com.fxj.customdrawabletest.ui; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.Drawable; public class CustomDrawable extends Drawable { Paint mPaint; public CustomDrawable(int color) { /*创建一个画笔,画笔抗锯齿*/ this.mPaint=new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(color); } @Override public void draw(Canvas canvas) { // TODO Auto-generated method stub final Rect rect=getBounds(); float cx=rect.exactCenterX(); float cy=rect.exactCenterY(); canvas.drawCircle(cx, cy,Math.min(cx, cy), mPaint); } /**设置透明度*/ @Override public void setAlpha(int alpha) { // TODO Auto-generated method stub mPaint.setAlpha(alpha); invalidateSelf(); } @Override public void setColorFilter(ColorFilter cf) { // TODO Auto-generated method stub mPaint.setColorFilter(cf); invalidateSelf(); } @Override public int getOpacity() { // TODO Auto-generated method stub return PixelFormat.TRANSLUCENT;/*使窗口支持透明度*/ } }
在上面的代码中draw、setAlpha、setColorFilter和getOpacity这几个方法都是必须要实现的,其中draw方法是最主要的方法,这个方法就和VIew的draw方法类似。
MainActivity的代码如下:
package com.fxj.customdrawabletest; import com.fxj.customdrawabletest.ui.CustomDrawable; import android.os.Bundle; import android.annotation.SuppressLint; import android.app.Activity; import android.graphics.Color; import android.util.Log; import android.view.Menu; import android.view.View; /** * 文件名称:自定义Drawable-自定义CustomDrawableTest * 时间:2016-9-29 20:10 * 说明:1、自定义Drawable需要继承重写android.graphics.drawable.Drawable类中draw、setAlpha、setColorFilter、getOpacity这几个方法, * 并且这几个方法都是必须重写的。 * 2、当Activity的当前Window获得或失去焦点时会被回调Activity.onWindowFocusChanged方法。 * */ public class MainActivity extends Activity { private String tag="MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onWindowFocusChanged(boolean hasFocus) { // TODO Auto-generated method stub super.onWindowFocusChanged(hasFocus); if(hasFocus){ View tv2=findViewById(R.id.tv02); int colorValue=Color.parseColor("#00ff00"); Log.i(tag,"colorValue="+colorValue); CustomDrawable customDrawable=new CustomDrawable(colorValue); tv2.setBackgroundDrawable(customDrawable); } } }在MainAcitivity代码中重写了Activity.onWindowFocusChanged方法,如果当前Activity的当前Windows获得或失去焦点时,就会回调Activity.onWindowFocusChanged方法。
例程代码(github)
相关文章推荐
- Drawable资源——自定义Drawable
- android 自定义drawable图形(oval,ring,rectangle)
- Android 自定义Drawable
- Drawable与Bitmap 自定义
- 自定义Drawable(文字按钮点击效果设置)
- android常见的自定义drawable资源
- 自定义DrawableTextView——实现TextView左上右下的点击监听
- 自定义Drawable实现灵动的红鲤鱼动画(下篇)
- 自定义drawable(shape)
- android自定义圆形drawable
- Android中自定义drawable资源实现布局的圆角边框效果
- Android中的Drawable基础与自定义Drawable
- 自定义selectorDrawable
- Android自定义RadioButton以控制drawableTop等方向的图片大小
- 在xml文档中自定义drawable控件样式
- code自定义的Drawable
- android通过drawable资源实现常用的自定义效果
- Android自定义drawable(Shape)详解
- 自定义Drawable
- Android 属性动画——自定义Drawable