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);
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;
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;
default:
}
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();
}
}