自己定义控件-画板,橡皮擦,刮刮乐
画板效果图
页面代码
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 自己定义控件实现刮刮卡效果 真的就仅仅是刮刮卡么
自己定义控件-画板,橡皮擦,刮刮乐相关推荐
- 自己定义控件事实上非常easy1/6
尊重原创转载请注明:From AigeStudio(http://blog.csdn.net/aigestudio)Power by Aige 侵权必究! 炮兵镇楼 上一节我们粗略地讲了下怎样去实现我 ...
- Android自己定义控件2-简单的写字板控件
概述 上一篇文章我们对自己定义控件进行了一个大体的知识介绍. 今天就来学习自己定义一个简单的写字板控件. 先来看看效果图 就是简单的依据手指写下的轨迹去画出内容 实现 在上一篇文章里提到了androi ...
- android 原理 组合控件_Android自定义控件进阶01-自定义控件开发套路与流程
Android自定义控件进阶01-自定义控件开发套路与流程本章节为什么要叫进阶篇?(虽然讲的是基础内容),因为从本篇开始,将会逐渐揭开自定义View的神秘面纱,每一篇都将比上一篇内容更加深入,利用所学 ...
- iOS项目开发实战——使用Xcode6设计自己定义控件与图形
在iOS开发中,有很多控件都是Xcode默认提供的.使用这些控件是很方便的.可是因为某些须要.须要自己设计控件,那么应该怎么做呢?在Xcode6中提供了这种接口,同意开发人员高速开发自己定义控件,而且 ...
- git-osc自己定义控件之:CircleImageView
git-osc自己定义控件之:CircleImageView 一.CircleImageView的使用 在项目中能够发现,用户的头像都是圆形的.感觉非常好奇,昨天最终发现了,原来是自定了一个Image ...
- 【Android】自己定义控件——仿天猫Indicator
今天来说说类似天猫的Banner中的小圆点是怎么做的(图中绿圈部分) 在学习自己定义控件之前,我用的是很二的方法,直接在布局中放入多个ImageView,然后代码中依据Pager切换来改变图片.这样的 ...
- Android自己定义控件之应用程序首页轮播图
如今基本上大多数的Android应用程序的首页都有轮播图.就是像下图这种(此图为转载的一篇博文中的图.拿来直接用了): 像这种组件我相信大多数的应用程序都会使用到,本文就是自己定义一个这种组件,能够动 ...
- 定义控件有效 无效EnableWindow
定义控件有效无效GetDlgItem(IDC_Pre_Name)-> EnableWindow(FALSE); 定义控件有效有效GetDlgItem(IDC_Pre_Name)-> Ena ...
- Qt编写可视化大屏电子看板系统11-自定义控件
一.前言 说到自定义控件,我是感觉特别熟悉的几个字,本人亲自原创的自定义控件超过110个,都是来自各个行业的具体应用真实需求,而不是凭空捏造的,当然有几个小控件也有点凑数的嫌疑,在编写整个数据可视化大 ...
最新文章
- linux命令行中curl和wget自动解压功能对比
- 数学建模公式编辑器_一款“神奇”的数学公式编辑器
- linux on android分区,linux分区笔记
- c++接口与实现的分离
- 自己过好就是最大的公益!
- Python实战之路-day6
- js laypage mysql_laypage 物理分页与逻辑分页实例
- 远程 交换机 日志服务器,交换机怎么配置 日志发送日志服务器
- 用计算机计算根号2^2-1÷,2根号2(万能计算器在线使用)
- Convolution over Hierarchical Syntactic and Lexical Graphs for Aspect Level Sentiment Analysis论文阅读
- Banner打造广告自动轮播图
- Cocos Creator 3.0 入门 ! 2D 素材 3D 效果!
- 连接超时计算机无法连接失败,爱思助手无法连接或者连接超时解决办法
- 有限元方法求解二维矩形区域椭圆方程
- 过度商业化的小丑——刘跑跑
- CANoe之CAPL编程(CANoe系列其三)
- 集群节点启动报错 BEA-000386
- 5 机器学习 朴素贝叶斯算法 高斯模型 多项式模型 伯努利模型 拉普拉普平滑系数 TfidfVectorizer
- 3D_systems_touch控制Dobot魔术师
- python-18-正则表达式