当前位置: 代码迷 >> 综合 >> ApiDemo学习 AlphaBitmap 和 AnimateDrawables
  详细解决方案

ApiDemo学习 AlphaBitmap 和 AnimateDrawables

热度:72   发布时间:2024-01-21 15:22:50.0

绘制一些图案 ,之前也都用过


public class AlphaBitmap extends GraphicsActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(new SampleView(this));}private static class SampleView extends View {private Bitmap mBitmap;private Bitmap mBitmap2;private Bitmap mBitmap3;private Shader mShader;//在bitmap上画文字和 已经对图片进行混合private static void drawIntoBitmap(Bitmap bm) {float x = bm.getWidth();float y = bm.getHeight();Canvas c = new Canvas(bm);Paint p = new Paint();p.setAntiAlias(true);p.setAlpha(0x80);c.drawCircle(x/2, y/2, x/2, p);p.setAlpha(0x30); //半透明度p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC)); //绘图方式p.setTextSize(60);p.setTextAlign(Paint.Align.CENTER);Paint.FontMetrics fm = p.getFontMetrics();c.drawText("Alpha", x/2, (y-fm.ascent)/2, p);}public SampleView(Context context) {super(context);setFocusable(true);InputStream is = context.getResources().openRawResource(R.drawable.app_sample_code);mBitmap = BitmapFactory.decodeStream(is);//从res中拿到bitmapmBitmap2 = mBitmap.extractAlpha();//拿出 这个图案的形状mBitmap3 = Bitmap.createBitmap(200, 200, Bitmap.Config.ALPHA_8);drawIntoBitmap(mBitmap3);mShader = new LinearGradient(0, 0, 100, 70, new int[] {Color.RED, Color.GREEN, Color.BLUE },null, Shader.TileMode.MIRROR); //线性渐变色}//把所有bitmap绘制到画布上@Override protected void onDraw(Canvas canvas) {canvas.drawColor(Color.WHITE);Paint p = new Paint();float y = 10;p.setColor(Color.RED);canvas.drawBitmap(mBitmap, 10, y, p);y += mBitmap.getHeight() + 10;canvas.drawBitmap(mBitmap2, 10, y, p);y += mBitmap2.getHeight() + 10;p.setShader(mShader);canvas.drawBitmap(mBitmap3, 10, y, p);}}
}

AnimateDrawables 也支持 2.3

public class AnimateDrawables extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(new SampleView(this));}private static class SampleView extends View {private AnimateDrawable mDrawable;public SampleView(Context context) {super(context);setFocusable(true);setFocusableInTouchMode(true);Drawable dr = context.getResources().getDrawable(R.drawable.ic_launcher);dr.setBounds(0, 0, dr.getIntrinsicWidth(), dr.getIntrinsicHeight());Animation an = new TranslateAnimation(0, 100, 0, 200);an.setDuration(2000);an.setRepeatCount(-1);an.initialize(10, 10, 10, 10);mDrawable = new AnimateDrawable(dr, an);an.startNow();}@Overrideprotected void onDraw(Canvas canvas) {canvas.drawColor(Color.WHITE);mDrawable.draw(canvas);invalidate();}}
}


public class AnimateDrawable extends ProxyDrawable {private Animation mAnimation;private Transformation mTransformation = new Transformation();public AnimateDrawable(Drawable target) {super(target);}public AnimateDrawable(Drawable target, Animation animation) {super(target);mAnimation = animation;}public Animation getAnimation() {return mAnimation;}public void setAnimation(Animation anim) {mAnimation = anim;}public boolean hasStarted() {return mAnimation != null && mAnimation.hasStarted();}public boolean hasEnded() {return mAnimation == null || mAnimation.hasEnded();}@Overridepublic void draw(Canvas canvas) {Drawable dr = getProxy();if (dr != null) {int sc = canvas.save();Animation anim = mAnimation;if (anim != null) {//获取当前时间 drawable的位置anim.getTransformation(AnimationUtils.currentAnimationTimeMillis(),mTransformation);//设置要画的bitmap形状canvas.concat(mTransformation.getMatrix());}dr.draw(canvas);canvas.restoreToCount(sc);//回到canvas.save以前的状态}}
}



public class ProxyDrawable extends Drawable { //这是drawable的样式private Drawable mProxy;private boolean mMutated;public ProxyDrawable(Drawable target) {mProxy = target;}public Drawable getProxy() {return mProxy;}public void setProxy(Drawable proxy) {if (proxy != this) {mProxy = proxy;}}@Overridepublic void draw(Canvas canvas) {if (mProxy != null) {mProxy.draw(canvas);}}@Overridepublic int getIntrinsicWidth() {return mProxy != null ? mProxy.getIntrinsicWidth() : -1;}@Overridepublic int getIntrinsicHeight() {return mProxy != null ? mProxy.getIntrinsicHeight() : -1;}@Overridepublic int getOpacity() {return mProxy != null ? mProxy.getOpacity() : PixelFormat.TRANSPARENT;}@Overridepublic void setFilterBitmap(boolean filter) {if (mProxy != null) {mProxy.setFilterBitmap(filter);}}@Overridepublic void setDither(boolean dither) {if (mProxy != null) {mProxy.setDither(dither);}}@Overridepublic void setColorFilter(ColorFilter colorFilter) {if (mProxy != null) {mProxy.setColorFilter(colorFilter);}}@Overridepublic void setAlpha(int alpha) {if (mProxy != null) {mProxy.setAlpha(alpha);}}@Overridepublic Drawable mutate() {if (mProxy != null && !mMutated && super.mutate() == this) {mProxy.mutate();mMutated = true;}return this;}
}