创建android画笔程序的例子(有镜面效果)
来源:互联网 发布:java写一个表格 编辑:程序博客网 时间:2024/05/22 01:32
先上图:
关键是在检测到手指移动的时候用mPath.quadTo的方法,android sdk解释是:
Add a quadratic bezier from the last point, approaching control point (x1,y1), and ending at (x2,y2). If no moveTo() call has been made for this contour, the first point is automatically set to (0,0).
中文是用贝塞尔曲线链接了(x1,y1),(x2,y2)这两个点,如果没有moveTo()这个方法调用的话,第一个点默认为(0,0)
android画图是用Canvas的API,如画一个实心的矩形,可以用在重写一个View的onDraw():
<span style="white-space:pre"></span>Rect rect = new Rect(100,100,500,500);mPaint.setStrokeWidth(5); //设置画笔的粗细mPaint.setColor(Color.RED); //设置画笔的颜色mPaint.setStyle(Style.FILL); //填充整个图形mPaint.setAntiAlias(true); //抗锯齿效果canvas.drawRect(rect, mPaint);
对于检测手指的移动,我们可以用onTouchEvent来实现:
private float mX, mY;private float mOppositeX, mOppositeY;private static final float TOUCH_TOLERANCE = 4; //当手指移动超过4时我们才去set Path@Overridepublic boolean onTouchEvent(MotionEvent event) {float x = event.getX();float y = event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:touch_start(x, y);if(isMirrorDraw) {touch_opposite_start(x, y);}invalidate();break;case MotionEvent.ACTION_MOVE:touch_move(x, y);if(isMirrorDraw) {touch_opposite_move(x, y);}invalidate();break;case MotionEvent.ACTION_UP:touch_up();if(isMirrorDraw) {touch_opposite_up();}invalidate();break;}return true;}private void touch_start(float x, float y) {mPath.reset();mPath.moveTo(x, y);mX = x;mY = y;}private void touch_move(float x, float y) {float dx = Math.abs(x - mX);float dy = Math.abs(y - mY);if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);mX = x;mY = y;}}private void touch_up() {mPath.lineTo(mX, mY);mCanvas.drawPath(mPath, mPaint);mPath.reset();}private void touch_opposite_up() {mOppositePath.lineTo(mOppositeX, mY);mCanvas.drawPath(mOppositePath, mOppoPaint);mOppositePath.reset();}private void touch_opposite_move(float x, float y) {float oppositeX = OppositeDrawActivity.screenWidth - x; //<span style="font-family: Arial, Helvetica, sans-serif;">OppositeDrawActivity.screenWidth是屏幕宽度</span>float dx = Math.abs(oppositeX - mOppositeX);float dy = Math.abs(y - mY);if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {mOppositePath.quadTo(mOppositeX, mY, (mOppositeX + oppositeX) / 2, (y + mY) / 2);mOppositeX = oppositeX;mY = y;}}private void touch_opposite_start(float x, float y) {mOppositePath.reset();float oppositeX = OppositeDrawActivity.screenWidth - x;mOppositePath.moveTo(oppositeX, y);mOppositeX = oppositeX;}
然后重写onDraw():
@Overrideprotected void onDraw(Canvas canvas) {canvas.drawColor(0xFFAAAAAA);canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);canvas.drawPath(mPath, mPaint);if(isMirrorDraw) {canvas.drawPath(mOppositePath, mOppoPaint);}}
代码可以在http://download.csdn.net/detail/baidu_nod/7572549下载
1 0
- 创建android画笔程序的例子(有镜面效果)
- ios创建画笔的例子(双笔画效果)
- 创建 iPhone 画笔程序的教程
- Android高级画笔效果实现的探索
- Android 画笔的使用
- 创建画笔的三个方法
- 孙鑫VC学习笔记:第十讲画图 创建设置画笔的对话框 并且可以预览效果
- 孙鑫VC学习笔记:第十讲画图 创建设置画笔的对话框 并且可以预览效果
- 现有的画笔和创建自己的画笔6zhongGDI
- 创建窗口的例子程序
- android画笔的基本属性
- 画笔的创建、选择和删除
- 4.4.2.1 创建随机颜色的画笔
- Android 画笔
- Android 在Canvas中实现画笔效果(一)--钢笔
- android--服务程序的例子
- android中画笔paint的方法汇总
- android画笔错位问题的解决
- Java并发教程
- [cocos2dx笔记005]一个字符串管理配置类
- Servlet中文乱码问题及解决方案剖析
- 百度2014笔试题目
- y450安装leopard详解。(已经找到多点触摸驱动啦)
- 创建android画笔程序的例子(有镜面效果)
- ios图片加水印或文字
- Hive学习之部署UDF的四种方法
- extern C的作用详解(通过它可以在c++中使用c代码)
- 经纬财富:无锡现货白银天通银
- 翻译:盘点8种CSS实现垂直居中水平居中的绝对定位居中技术
- 仿QQ2013源码
- 什么是BGP线路?什么是BGP机房?
- Java集合类详解