Android 自定义 按当前view的宽高进行矩形移动内容图

来源:互联网 发布:网络运维绩效考核 编辑:程序博客网 时间:2024/05/18 01:41

import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.Rect;import android.view.View;/** * 按当前view的宽高进行矩形移动 内容图 * * author : stone * email  : aa86799@163.com * time   : 16/4/15 10 18 */public class RectTransView extends View {    private Bitmap mBitmap;    private int bw;    private int bh;    private int l, t;    private int speed = 10;    private int state;    private float degress;    public RectTransView(Context context) {        super(context);//setBackgroundColor(Color.parseColor("#dcaa0000"));    }    public void setBitmapResid(int resid) {        mBitmap = BitmapFactory.decodeStream(getResources().openRawResource(resid));        bw = mBitmap.getWidth();        bh = mBitmap.getHeight();        invalidate();    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        if (mBitmap == null) {            return;        }        int w = getMeasuredWidth();        int h = getMeasuredHeight();        Matrix matrix;        speed = (int) (Math.random() * 20);        switch (state) {            case 0: {                if (l + speed <= w - bw) {                    l += speed;                } else {                    l = w - bw;                    state = 1;                }            }            break;            case 1: {                if (t + speed <= h - bh) {                    t += speed;                } else {                    t = h - bh;                    state = 2;                }            }            break;            case 2: {                if (l > speed) {                    l -= speed;                } else {                    l = 0;                    state = 3;                }            }            break;            case 3: {                if (t > speed) {                    t -= speed;                } else {                    t = 0;                    state = 0;                }            }            break;        }        matrix = new Matrix();        matrix.postTranslate(l, t);        degress += 4;        matrix.postRotate(degress);        Bitmap createBitmap = Bitmap.createBitmap(mBitmap, 0, 0, bw, bh, matrix, true);        canvas.drawBitmap(createBitmap, null, new Rect(l, t, l + bw, t + bh), null);        invalidate();    }}

public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        RelativeLayout layout = new RelativeLayout(this);        setContentView(layout);        RectTransView anim = new RectTransView(this);        anim.setBitmapResid(R.mipmap.ic_launcher_android);        int widthPixels = getResources().getDisplayMetrics().widthPixels;        int heightPixels = getResources().getDisplayMetrics().heightPixels;        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(                widthPixels/2, heightPixels/2);        params.addRule(RelativeLayout.CENTER_IN_PARENT);        layout.addView(anim, params);    }}


0 0