SurfaceView系列——绘制绘图板
来源:互联网 发布:淘宝上买气排有记录吗 编辑:程序博客网 时间:2024/05/16 05:56
工作一下子就闲下来了, 有点不习惯 ,就没事回顾下以前用的东西,总结下 ,
上次写了一篇关于surfaceVieW的博客 , 这次在写基本上差不多,没什么好写的。自己写着玩吧 。(这次不算完,持续更新。。。(一个完整的绘图板)
上代码 , 注释的都比价细致 ,
package reeman.com.surfaceviewpaint;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Path;import android.graphics.PixelFormat;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;public class PaintView extends SurfaceView implements SurfaceHolder.Callback, Runnable { private Paint mPaint = null; private Path mPath = null; // 线程结束标志位 boolean mLoop = true; SurfaceHolder mSurfaceHolder = null; Canvas mCanvas; public PaintView(Context context, AttributeSet arr) { super(context, arr); mSurfaceHolder = this.getHolder();//获取holder mSurfaceHolder.addCallback(this); mSurfaceHolder.setFormat(PixelFormat.OPAQUE);//不透明 this.setFocusable(true); init(); } private void init() { mPaint = new Paint(); mPath = new Path(); mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(5); mPaint.setColor(COLOR_BLUE); mPaint.setStrokeCap(Paint.Cap.ROUND); //圆头 mPaint.setDither(true);//消除拉动,使画面圓滑 mPaint.setStrokeJoin(Paint.Join.ROUND); //结合方式,平滑 } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { new Thread(this).start();//启动线程 } @Override public void surfaceDestroyed(SurfaceHolder holder) { mLoop = false; //结束线程 } @Override public void run() { while (mLoop == true) { Draw(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } int COLOR_WHITE = 0xffffffff; int COLOR_BLUE = 0xff3F51B5; // 绘图 private void Draw() { try { mCanvas = mSurfaceHolder.lockCanvas(); mCanvas.drawColor(COLOR_WHITE); mCanvas.drawPath(mPath, mPaint); } catch (Exception e) { } finally { if (mCanvas != null) { mSurfaceHolder.unlockCanvasAndPost(mCanvas); } } } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: touchDown(event); break; case MotionEvent.ACTION_MOVE: touchMove(event); } //更新绘制 return true; } private float defaultX; private float defaultY; //手指点下屏幕时调用 private void touchDown(MotionEvent event) { float xDown = event.getX(); float yDown = event.getY(); defaultX = xDown; defaultY = yDown; //mPath绘制的绘制起点 mPath.moveTo(xDown, yDown); } //手指在屏幕上滑动时调用 private void touchMove(MotionEvent event) { float xUp = event.getX(); float yUp = event.getY(); float middleX = (xUp + defaultX) / 2; float middleY = (yUp + defaultY) / 2; mPath.quadTo(defaultX, defaultY, middleX, middleY); defaultX = xUp; defaultY = yUp; invalidate(); } private void setEraser() { mPaint = new Paint(); mPath = new Path(); mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(50); mPaint.setStrokeCap(Paint.Cap.ROUND); //圆头 mPaint.setDither(true);//消除拉动,使画面圓滑 mPaint.setStrokeJoin(Paint.Join.ROUND); //结合方式,平滑 mPaint.setAlpha(0); //// mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); }}
阅读全文
0 0
- SurfaceView系列——绘制绘图板
- 绘图板
- Python下使用OpenCV——使用Trackbar实现绘图板
- android图像绘制(四)——SurfaceView问题,自定义控件
- Android SurfaceView绘制
- SurfaceView绘制曲线
- SurfaceView绘制音乐柱形图
- android:SurfaceView绘制图形
- 用SurfaceView绘制正弦曲线
- 第十二章—SurfaceView
- [Java学习日志]图形界面开发练习——绘图板的实现
- Android SurfaceView绘制组合图形
- Android SurfaceView绘制组合图形
- SurfaceView预览Camera+GLSurfaceView绘制
- android--(绘制几何图形、图片、surfaceView)
- Android利用SurfaceView绘制正弦曲线
- Android 基于surfaceView绘制正弦曲线
- Android SurfaceView的绘制详解
- mysql 转换NULL数据方法
- Google搜索引擎的使用技巧
- freemarker和jsp的区别
- R与RStudio安装与学习(一)
- 并查集详解(转)
- SurfaceView系列——绘制绘图板
- 蓝桥杯 ADV-211 算法提高 2-2整数求和
- Sed命令的用法
- HTML基本概念
- 数据库阿里连接池 druid配置详解
- Mac 快速打开终端快捷键
- Learning from Imbalanced Classes
- Python Numpy包 常用函数总结
- 蓝桥杯 ADV-210 算法提高 2-1屏幕打印