Android: 利用Bimap,canvas处理图片(画直线)
转:http://www.eoeandroid.com/thread-114497-1-1.html
?
画直线效果图:
?
??import android.app.Activity;
import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.ImageView;public class MyDrawView extends ImageView {private float beginX = 0, beginY = 0, endX = 0, endY = 0;private int eventFlag = 0;// 触屏事件点击private Canvas canvasSelf;// 用于保存所画图像的画布private Bitmap bimap;// 用于保存所画图像的图画public void setBitmap(Bitmap b) {bimap = b;canvasSelf = new Canvas(bimap);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (DrawActivity.drawFlag) {Paint paint = new Paint();/** 设置画笔 */paint.setColor(Color.WHITE);paint.setStyle(Paint.Style.STROKE);paint.setAntiAlias(true);// 把之前画出来保存后的图再画出来canvas.drawBitmap(bimap, 0, 0, null);// 画中间长得线段canvas.drawLine(beginX, beginY, endX, endY, paint);if (eventFlag == MotionEvent.ACTION_UP) {// 这里将直线画到canvasself上,它就保存在了bimap这张图上canvasSelf.drawLine(beginX, beginY, endX, endY, paint);}}}@Overridepublic boolean onTouchEvent(MotionEvent event) {endX = event.getX();endY = event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:eventFlag = MotionEvent.ACTION_DOWN;beginX = endX;beginY = endY;invalidate();break;case MotionEvent.ACTION_MOVE:eventFlag = MotionEvent.ACTION_MOVE;invalidate();break;case MotionEvent.ACTION_UP:eventFlag = MotionEvent.ACTION_UP;invalidate();break;}return true;}/** * 在XML中使用自定义View必须要使用含AttributeSet变量参数的构造函数 * @param context * @param attrs */public MyDrawView(Context context, AttributeSet attrs) {super(context, attrs);}public MyDrawView(Context context) {super(context);}}?