`
abc20899
  • 浏览: 909988 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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();  
            }  
        }  
    }  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics