画板效果图

页面代码

public class ActionerView extends View {private Paint mPaint = new Paint();private Path mPath = new Path();//手指滑动路径private Canvas mCanvas;//缓存画布private Bitmap mBitmap;//缓存图片private float pointX, pointY;//触点坐标public ActionerView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);int width = getMeasuredWidth();int height = getMeasuredHeight();initPaint();//初始化画笔mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);mCanvas = new Canvas(mBitmap);}@Overridepublic void draw(Canvas canvas) {super.draw(canvas);mCanvas.drawPath(mPath, mPaint);canvas.drawBitmap(mBitmap, 0, 0, null);}@Overridepublic boolean onTouchEvent(MotionEvent event) {pointX = event.getX();pointY = event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:mPath.moveTo(pointX, pointY);//将路径移动到点(pointX, pointY),不绘制break;case MotionEvent.ACTION_MOVE:mPath.lineTo(pointX, pointY);//绘制一条从上个触点到点(pointX, pointY)的线条break;}invalidate();//又一次画图return true;}private void initPaint() {//初始化画笔mPaint.setDither(true);//图片抖动处理mPaint.setAntiAlias(true);mPaint.setStrokeWidth(20);mPaint.setStyle(Paint.Style.STROKE);mPaint.setStrokeCap(Paint.Cap.ROUND);//设置笔头为圆角mPaint.setStrokeJoin(Paint.Join.ROUND);}
}

橡皮擦效果图

页面代码

public class ActionView extends View {private Paint mPaint = new Paint();private Path mPath = new Path();//手指滑动路径private Canvas mCanvas;//缓存画布private Bitmap mBitmap;//缓存图片private float pointX, pointY;//触点坐标public ActionView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);int width = getMeasuredWidth();int height = getMeasuredHeight();initPaint();//初始化画笔mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); //初始化BitmapmCanvas = new Canvas(mBitmap);mCanvas.drawColor(Color.parseColor("#c0c0c0"));//设置画板背景}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Bitmap mBackBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bg);canvas.drawBitmap(mBackBitmap, 0, 0, null);mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));mCanvas.drawPath(mPath, mPaint);canvas.drawBitmap(mBitmap, 0, 0, null);}@Overridepublic boolean onTouchEvent(MotionEvent event) {pointX = event.getX();pointY = event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:mPath.moveTo(pointX, pointY);//将路径移动到点(pointX, pointY)。不绘制break;case MotionEvent.ACTION_MOVE:mPath.lineTo(pointX, pointY);//绘制一条从上个触点到点(pointX, pointY)的线条break;}invalidate();//又一次画图return true;}private void initPaint() {//初始化画笔mPaint.setDither(true);//设定是否使用图像抖动处理。会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰mPaint.setAntiAlias(true);//设置抗锯齿mPaint.setStrokeWidth(30);mPaint.setColor(Color.RED);//设置画笔颜色mPaint.setStyle(Paint.Style.STROKE);mPaint.setStrokeCap(Paint.Cap.ROUND);mPaint.setStrokeJoin(Paint.Join.ROUND);//圆角mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST));}}

刮刮乐效果图

页面代码

public class ActionersView extends View {private Paint mPaint = new Paint();private Paint txtPaint = new Paint();//文字画笔private Path mPath = new Path();//手指滑动路径private Canvas mCanvas;//缓存画布private Bitmap mBitmap;//缓存图片private float pointX, pointY;//触点坐标private String txtStr = "¥5,000,000";public ActionersView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);int width = getMeasuredWidth();int height = getMeasuredHeight();mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); // 初始化bitmapmCanvas = new Canvas(mBitmap);initPaint();//初始化画笔
//        mCanvas.drawRoundRect(new RectF(100, 500, width - 100, height - 500), 30, 30, mPaint);//效果一:背景为灰色的矩形mCanvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.bg1), null, new RectF(100, 500, width - 100, height - 500), null);//效果二:背景为图片}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);txtPaint.setTextSize(60);canvas.drawText(txtStr, getWidth() / 2 - 150, getHeight() / 2, txtPaint);mCanvas.drawPath(mPath, mPaint);canvas.drawBitmap(mBitmap, 0, 0, null);}@Overridepublic boolean onTouchEvent(MotionEvent event) {pointX = event.getX();pointY = event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:mPath.moveTo(pointX, pointY);//将路径移动到点(pointX, pointY),不绘制break;case MotionEvent.ACTION_MOVE:mPath.lineTo(pointX, pointY);//绘制一条从上个触点到点(pointX, pointY)的线条break;}invalidate();//又一次画图return true;}private void initPaint() {//初始化画笔mPaint.setDither(true);mPaint.setAntiAlias(true);mPaint.setStrokeWidth(30);mPaint.setStyle(Paint.Style.STROKE);mPaint.setStrokeCap(Paint.Cap.ROUND);mPaint.setStrokeJoin(Paint.Join.ROUND);mPaint.setColor(Color.parseColor("#c0c0c0"));mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));}}

附:Xfermode的效果


參考链接:Android 自己定义控件实现刮刮卡效果 真的就仅仅是刮刮卡么

自己定义控件-画板,橡皮擦,刮刮乐相关推荐

  1. 自己定义控件事实上非常easy1/6

    尊重原创转载请注明:From AigeStudio(http://blog.csdn.net/aigestudio)Power by Aige 侵权必究! 炮兵镇楼 上一节我们粗略地讲了下怎样去实现我 ...

  2. Android自己定义控件2-简单的写字板控件

    概述 上一篇文章我们对自己定义控件进行了一个大体的知识介绍. 今天就来学习自己定义一个简单的写字板控件. 先来看看效果图 就是简单的依据手指写下的轨迹去画出内容 实现 在上一篇文章里提到了androi ...

  3. android 原理 组合控件_Android自定义控件进阶01-自定义控件开发套路与流程

    Android自定义控件进阶01-自定义控件开发套路与流程本章节为什么要叫进阶篇?(虽然讲的是基础内容),因为从本篇开始,将会逐渐揭开自定义View的神秘面纱,每一篇都将比上一篇内容更加深入,利用所学 ...

  4. iOS项目开发实战——使用Xcode6设计自己定义控件与图形

    在iOS开发中,有很多控件都是Xcode默认提供的.使用这些控件是很方便的.可是因为某些须要.须要自己设计控件,那么应该怎么做呢?在Xcode6中提供了这种接口,同意开发人员高速开发自己定义控件,而且 ...

  5. git-osc自己定义控件之:CircleImageView

    git-osc自己定义控件之:CircleImageView 一.CircleImageView的使用 在项目中能够发现,用户的头像都是圆形的.感觉非常好奇,昨天最终发现了,原来是自定了一个Image ...

  6. 【Android】自己定义控件——仿天猫Indicator

    今天来说说类似天猫的Banner中的小圆点是怎么做的(图中绿圈部分) 在学习自己定义控件之前,我用的是很二的方法,直接在布局中放入多个ImageView,然后代码中依据Pager切换来改变图片.这样的 ...

  7. Android自己定义控件之应用程序首页轮播图

    如今基本上大多数的Android应用程序的首页都有轮播图.就是像下图这种(此图为转载的一篇博文中的图.拿来直接用了): 像这种组件我相信大多数的应用程序都会使用到,本文就是自己定义一个这种组件,能够动 ...

  8. 定义控件有效 无效EnableWindow

    定义控件有效无效GetDlgItem(IDC_Pre_Name)-> EnableWindow(FALSE); 定义控件有效有效GetDlgItem(IDC_Pre_Name)-> Ena ...

  9. Qt编写可视化大屏电子看板系统11-自定义控件

    一.前言 说到自定义控件,我是感觉特别熟悉的几个字,本人亲自原创的自定义控件超过110个,都是来自各个行业的具体应用真实需求,而不是凭空捏造的,当然有几个小控件也有点凑数的嫌疑,在编写整个数据可视化大 ...

最新文章

  1. linux命令行中curl和wget自动解压功能对比
  2. 数学建模公式编辑器_一款“神奇”的数学公式编辑器
  3. linux on android分区,linux分区笔记
  4. c++接口与实现的分离
  5. 自己过好就是最大的公益!
  6. Python实战之路-day6
  7. js laypage mysql_laypage 物理分页与逻辑分页实例
  8. 远程 交换机 日志服务器,交换机怎么配置 日志发送日志服务器
  9. 用计算机计算根号2^2-1÷,2根号2(万能计算器在线使用)
  10. Convolution over Hierarchical Syntactic and Lexical Graphs for Aspect Level Sentiment Analysis论文阅读
  11. Banner打造广告自动轮播图
  12. Cocos Creator 3.0 入门 ! 2D 素材 3D 效果!
  13. 连接超时计算机无法连接失败,爱思助手无法连接或者连接超时解决办法
  14. 有限元方法求解二维矩形区域椭圆方程
  15. 过度商业化的小丑——刘跑跑
  16. CANoe之CAPL编程(CANoe系列其三)
  17. 集群节点启动报错 BEA-000386
  18. 5 机器学习 朴素贝叶斯算法 高斯模型 多项式模型 伯努利模型 拉普拉普平滑系数 TfidfVectorizer
  19. 3D_systems_touch控制Dobot魔术师
  20. python-18-正则表达式

热门文章

  1. 交互电子沙盘虚拟数字沙盘开发教程第2课
  2. 2022-2027年中国女性向游戏行业发展监测及投资战略研究报告
  3. 用ptyhon和vba清除Word的标题样式保留字体格式,生成标题目录。
  4. LCT (Link-cut-tree)
  5. Android 录屏\截图
  6. 金橙子科技递交上会稿:拟募资4亿 年营收2亿
  7. 【硬件工程师学软件】之 硬件工程师更需要全栈
  8. python常见加密方式总结踩坑小贴士
  9. AE(2):项目、合成、图层之间的关系
  10. VSTAR设计窗口及监测信号的选择