您的位置:首页 > 移动开发 > Android开发

android自定义圆角动画按钮

2011-03-03 17:45 204 查看






package com.geolo.android;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ImageView;
public class MyButtonView extends ImageView{
	private Bitmap animBitmap = null;
	private Bitmap buttonBitmap = null;
	private int moveX = 0;
	private boolean isPress = false;
	private int timeID = 0;
	private Integer myButtonID[] = new Integer[]{
			R.drawable.mybutton01,
			R.drawable.mybutton02,
			R.drawable.mybutton03,
			R.drawable.mybutton04,
			R.drawable.mybutton05,
			R.drawable.mybutton06,
			R.drawable.mybutton07,
			R.drawable.mybutton08,
			R.drawable.mybutton09,
			R.drawable.mybutton10,
			R.drawable.mybutton11,
			R.drawable.mybutton12,
			R.drawable.mybutton13,
			R.drawable.mybutton14,
			R.drawable.mybutton15,
			R.drawable.mybutton16,
			R.drawable.mybutton17,
			R.drawable.mybutton18,
			R.drawable.mybutton19,
			R.drawable.mybutton20
	};
	public MyButtonView(Context context) {
		this(context, null);
	}
	public MyButtonView(Context context, AttributeSet attrs) {
		super(context,attrs);
		animBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.myutil);
		buttonBitmap = BitmapFactory.decodeResource(getResources(),myButtonID[0]);
		new Thread(new MyThread()).start();
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		drawImage(canvas,0,0,animBitmap,moveX,0,200,100);
		canvas.drawBitmap(buttonBitmap,20,15, null);
	}
	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		setMeasuredDimension(131, 53);
	}

	private void drawImage(Canvas canvas , int x, int y,Bitmap oldBitmap , int sx,int sy,int width ,int height){
		Rect rect_x = new Rect();
		rect_x.left = sx;
		rect_x.right = sx + width;
		rect_x.top = sy;
		rect_x.bottom = sy + height;
		Rect rect_y = new Rect();
		rect_y.left = x;
		rect_y.right = x + width;
		rect_y.top = y;
		rect_y.bottom = y + height;
		//按指定的裁剪矩形来绘制图片
		//分别是屏幕上的矩形和图片上要绘制的矩形裁剪
		Bitmap output = Bitmap.createBitmap(oldBitmap.getWidth(),
				oldBitmap.getHeight(), Config.ARGB_8888);
		Canvas canvas2 = new Canvas(output);
		Paint paint = new Paint();
		paint.setAntiAlias(true);
		//canvas.drawARGB(0, 0, 0, 0);
		//paint.setColor(0xff424242);
		//paint.setAlpha(140);
		//canvas2.drawRoundRect(new RectF(2,4,130,50), 10.0f, 10.0f, paint);
		canvas2.drawRoundRect(new RectF(1,0,130,50), 15.0f, 15.0f, paint);
		paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
		canvas2.drawBitmap(oldBitmap, rect_x, rect_y, paint);
		canvas.drawBitmap(output, 0	, 0, null);
		rect_x = null;
		rect_y = null;
	}

	@Override
	public boolean dispatchTouchEvent(MotionEvent event) {
		/*	if(isReleased){
			touchPoint = new Point();
			touchPoint.x = (int)event.getX();
			touchPoint.y = (int)event.getY();	
		}*/
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:  
			isPress = true;
			break;
		case MotionEvent.ACTION_UP:
			isPress = false;
			break;
		default:
			break;
		}
		return true;
	}
	private class MyThread implements Runnable{
		@Override
		public void run() {
			while(!Thread.currentThread().isInterrupted()){
				try {
					moveX++;
					if(moveX > 100){
						moveX = 0;
					}
					if(isPress){
						timeID ++ ;
						if(timeID <20){
							buttonBitmap = BitmapFactory.decodeResource(getResources(), myButtonID[timeID]);
						}else{
							timeID =0 ;
						}
					}
					Thread.sleep(50);
				} catch (Exception e) {
					Thread.currentThread().interrupt();
				}
				postInvalidate();
			}
		}
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: