Android Canvas绘制丘比特之箭
来源:互联网 发布:js 视频加载完成后执行 编辑:程序博客网 时间:2024/05/17 04:45
画心形
学习Android图形绘制过程中,随随便便的作品。
随便看看就好~~~
package com.zdl.gift.custom;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.View;/** * Created by zdl on 2017/8/30. */public class Heart extends View { private Paint heartPaint; private RectF rectFTopLeft; private RectF rectFTopRight; private RectF rectFBottom; private int width; private int height; private Paint whitePaint1; private Paint whitePaint2; private RectF rectFLeft; private RectF rectFRight; public Heart(Context context) { super(context); } public Heart(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(); } public Heart(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); width = 3*getMeasuredWidth()/4;//取宽的3/4来绘制,让旋转图形过后,心形能够完全展示 height = 3*getMeasuredHeight()/4;//取高的3/4来绘制,让旋转图形过后,心形能够完全展示 } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.TRANSPARENT);//设置背景透明 canvas.rotate(45, getMeasuredWidth()/2, getMeasuredHeight()/2);//旋转45°,使心形变正 rectFTopLeft.set(2, height/3+2, 2*width/3-2, height-2);//心形的左上部绘制位置 rectFTopRight.set(width/3+2, 2, width-2, 2*height/3-2);//心形的右上部绘制位置 rectFBottom.set(width/3, height/3, width-4, height-4);//心形的下部绘制位置 rectFLeft.set(width/3, height-4, width, height);//心形左边描边位置 rectFRight.set(width-4, height/3, width, height);//心形右边描边位置 canvas.drawRect(rectFBottom, heartPaint);//心下部 canvas.drawRect(rectFLeft, whitePaint2);//心下部左边描边 canvas.drawRect(rectFRight, whitePaint2);//心下部右边描边 /* 先画心的下部正方形,再画心的左上角、右上角,是为了覆盖正方形的左上角的点 这里给心左上角、右上角描边,修改起始角度和经过角度,是为了将上面正方形的左上角红色覆盖 */ canvas.drawArc(rectFTopLeft, 90, 180, true, heartPaint);//心左上角 canvas.drawArc(rectFTopLeft, 90, 185, false, whitePaint1);//心左上角描边 canvas.drawArc(rectFTopRight, 180, 180, true, heartPaint);//心右上角 canvas.drawArc(rectFTopRight, 175, 186, false, whitePaint1);//心右上角描边 } private void init() { heartPaint = new Paint();//画心的红色画笔 heartPaint.setAntiAlias(true);//抗锯齿 heartPaint.setColor(Color.RED); whitePaint1 = new Paint();//给心形描边的白色画笔 whitePaint1.setAntiAlias(true); whitePaint1.setColor(Color.WHITE); whitePaint1.setStrokeWidth(4.0f);//画笔的宽度 whitePaint1.setStyle(Paint.Style.STROKE);//FILL:实心 STROKE:空心 whitePaint2 = new Paint();//给心形描边的白色画笔 whitePaint2.setAntiAlias(true); whitePaint2.setColor(Color.WHITE); rectFTopLeft = new RectF();//心左上角位置 rectFTopRight = new RectF();//心右上角位置 rectFBottom = new RectF();//心下部位置 rectFLeft = new RectF();//心下部左边描边位置 rectFRight = new RectF();//心下部右边描边位置 }}
来张效果图:
这里要说一下,为什么心周围要描白边呢,你猜~~
当然是做这个啦
接下来就是箭了:
画箭头
package com.zdl.gift.custom;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.View;/** * Created by zdl on 2017/8/30. */public class Arrow extends View { private int width; private int height; private Paint arrowPaint; private Path arrowPath; public Arrow(Context context) { super(context); } public Arrow(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(); } public Arrow(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); width = getMeasuredWidth(); height = getMeasuredHeight(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.TRANSPARENT); canvas.rotate(165, width/2, height/2); //箭头主体 arrowPath.moveTo(20, height/2-3); arrowPath.lineTo(width-30, height/2-3); arrowPath.lineTo(width-30, height/2-12); arrowPath.lineTo(width, height/2); arrowPath.lineTo(width-30, height/2+12); arrowPath.lineTo(width-30, height/2+3); arrowPath.lineTo(20, height/2+3); arrowPath.close(); canvas.drawPath(arrowPath, arrowPaint); //上部尾翼 for (int i = 0; i < 3; i++) { arrowPath.moveTo(20+20*i, height/2-3); arrowPath.lineTo(0+20*i, height/2-23); arrowPath.lineTo(12+20*i, height/2-23); arrowPath.lineTo(32+20*i, height/2-3); arrowPath.close(); canvas.drawPath(arrowPath, arrowPaint); } //下部尾翼 for (int i = 0; i < 3; i++) { arrowPath.moveTo(20+20*i, height/2+3); arrowPath.lineTo(0+20*i, height/2+23); arrowPath.lineTo(12+20*i, height/2+23); arrowPath.lineTo(32+20*i, height/2+3); arrowPath.close(); canvas.drawPath(arrowPath, arrowPaint); } } private void init() { arrowPaint = new Paint();//箭头的画笔 arrowPaint.setAntiAlias(true);//抗锯齿 arrowPaint.setColor(Color.parseColor("#33ffff")); arrowPaint.setStyle(Paint.Style.FILL);//FILL:实心 STROKE:空心 arrowPath = new Path(); }}
箭Get:
丘比特之箭,咻~~~
组合后:
然并卵,里面有个问题(没发现的请忽视),现在并没有解决,啥时候想起来了,再议~ ~~
为什么这么做呢?当然是逼死强迫症啦
其实,主要是还没想好怎么解决(#斜眼)
阅读全文
1 0
- Android Canvas绘制丘比特之箭
- "丘比特之箭"——简单的canvas动画
- Android绘制之Canvas
- android开发 之 Canvas绘制文字,图片
- Canvas之绘制字符串
- html5之canvas绘制
- Android Canvas 图形绘制
- Android Canvas绘制七巧板
- Android绘制工具Canvas
- [Canvas系列]Canvas绘制曲线之arcto_05
- canvas绘制之渐变色
- canvas之二:绘制三角形
- Canvas之绘制基本形状
- html5之Canvas绘制刮刮卡
- Canvas练习之绘制网格
- HTML5之canvas绘制图片
- Canvas学习之绘制时钟
- Android canvas 绘制实心圆
- Java中关键字super与this的区别
- PIXI.js源码解析(4)——Texture
- python 关于Decimal 保留小数点后尾数的另一种方法
- js常用正则表达式
- 数组循环左移
- Android Canvas绘制丘比特之箭
- CSS3-过渡
- Linux-虚拟网络设备-OpenvSwitch(持续更新)
- 一名3年工作经验的程序员应该具备的技能(写得很好,果断转)
- 利用bootstrap框架做了一个采摘节节日活动网页
- 关于MySQL数据类型定义的几个细节-INT(N)/VARCHAR(N)/DECIMAL(M,N)
- 【学习摘记】马士兵bbs初级版_课时11-12_发表新帖:仿照”回复”就好
- Android 7.1.1中captive portal检测导致网络不可用的状态
- Python机器学习教程百度云全集