Android 自定义VIEW的运用

来源:互联网 发布:淘宝开店一个月没生意 编辑:程序博客网 时间:2024/04/18 15:48

---------------------XML

  <qianming.co.cc.DrawView
        android:id="@+id/draw"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

 

 

-----------------------.java

package qianming.co.cc;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class DrawView extends View {
 float preX;
 float preY;
 private Path path;
 public Paint paint = null;
 final int VIEW_WIDTH = 1024;
 final int VIEW_HEIGHT = 1024;
 // 定义一个内存中的图片,该图片将作为缓冲区
 Bitmap cacheBitmap = null;
 // 定义cacheBitmap上的Canvas对象
 Canvas cacheCanvas = null;

 public DrawView(Context context, AttributeSet attrs) {
  super(context, attrs);
  // TODO Auto-generated constructor stub
  cacheBitmap = Bitmap.createBitmap(VIEW_WIDTH, VIEW_HEIGHT,
    Config.ARGB_8888);
  cacheCanvas = new Canvas();
  path = new Path();
  // 设置cacheCanvas将会绘制到内存中的cacheBitmap上
  cacheCanvas.setBitmap(cacheBitmap);
  // 设置画笔的颜色
  paint = new Paint(Paint.DITHER_FLAG);
  paint.setColor(Color.RED);
  // 设置画笔风格
  paint.setStyle(Paint.Style.STROKE);
  paint.setStrokeWidth(4);
  // 反锯齿
  paint.setAntiAlias(true);
  paint.setDither(true);
  cacheCanvas.save(Canvas.ALL_SAVE_FLAG ); 
  cacheCanvas.restore();

 }

 @Override
 protected void onDraw(Canvas canvas) {
  // TODO Auto-generated method stub
  super.onDraw(canvas);
  Paint bmpPaint = new Paint();
  // 将cacheBitmap绘制到该View组件上
  canvas.drawBitmap(cacheBitmap, 0, 0, bmpPaint); // ②
  // 沿着path绘制
  canvas.drawPath(path, paint);

 }

 @Override
 public boolean onTouchEvent(MotionEvent event) {
  // TODO Auto-generated method stub

  float x = event.getX();
  float y = event.getY();
  switch (event.getAction()) {
  case MotionEvent.ACTION_DOWN:
   path.moveTo(x, y);
   preX = x;
   preY = y;
   break;
  case MotionEvent.ACTION_MOVE:
   path.quadTo(preX, preY, x, y);
   preX = x;
   preY = y;
   break;
  case MotionEvent.ACTION_UP:
   cacheCanvas.drawPath(path, paint); // ①
   path.reset();
   break;
  }

  invalidate();
  // 返回true表明处理方法已经处理该事件
  return true;
 }
 
 

}

原创粉丝点击