Android 继承SurfaceView

来源:互联网 发布:asp自动发卡平台源码 编辑:程序博客网 时间:2024/05/05 22:29
package com.siyehuazhilian.view;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.util.AttributeSet;import android.view.KeyEvent;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;import com.siyehuazhilian.bitmapdemo.R;public class BitmapView extends SurfaceView implements Callback, Runnable {private SurfaceHolder holder = null;private Bitmap bitmap = null;private Matrix matrix = null;private Paint paint = null;// 缩放比例private float sclace = 1;public BitmapView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);init(context);}public BitmapView(Context context, AttributeSet attrs) {super(context, attrs);init(context);}public BitmapView(Context context) {super(context);init(context);}/** * 初始化 */private void init(Context context) {holder = this.getHolder();// 添加回调方法holder.addCallback(this);// 得到一个bitmap对象// bitmap = ((BitmapDrawable) getResources().getDrawable(// R.drawable.img_016)).getBitmap();bitmap = getBitmapFromHuge(R.drawable.img_016, 480, 800);matrix = new Matrix();paint = new Paint();paint.setAntiAlias(true);new Thread(this).start();}/** * 绘画 */private void draw() {// 锁定画布Canvas canvas = holder.lockCanvas();if (canvas == null) {return;}// 清屏canvas.drawColor(Color.BLACK);// 清楚所有设置matrix.reset();// 旋转matrix.setRotate(45, 240, 400);// 扭曲,关键注意传入的是一个tan值matrix.setSkew((float) Math.tan(Math.PI / 6),(float) Math.tan(Math.PI / 6));// 平移matrix.setTranslate(50, 60);// 缩放matrix.setScale(0.5f, 0.5f);matrix.setScale(sclace, sclace, 240, 400);matrix.reset();// matrix.postRotate(5);// matrix.postTranslate(50, 60);matrix.preRotate(5);matrix.preTranslate(50, 60);canvas.drawBitmap(bitmap, matrix, paint);// 解锁并提交画布holder.unlockCanvasAndPost(canvas);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// 创建这个View的时候就画画draw();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_DPAD_UP:sclace -= 0.1;return true;case KeyEvent.KEYCODE_DPAD_DOWN:sclace += 0.1;return true;default:break;}return super.onKeyDown(keyCode, event);}/** * 把一个特大的图片转换为Bitmap对象 */private Bitmap getBitmapFromHuge(int id, int width, int height) {Bitmap bitmap = null;BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;bitmap = BitmapFactory.decodeResource(getResources(), id, options);options.inSampleSize = 1;int xSize = (int) Math.ceil(options.outWidth / width);int ySize = (int) Math.ceil(options.outHeight / height);if (xSize > 1 || ySize > 1) {options.inSampleSize = xSize > ySize ? xSize : ySize;}options.inJustDecodeBounds = false;bitmap = BitmapFactory.decodeResource(getResources(), id, options);return bitmap;}@Overridepublic void run() {while (true) {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}draw();}}}

原创粉丝点击