Canva画4个角,实现扫描二维码用的4个角
2016-07-13 17:47
302 查看
这是今天美工发给我的一个切图,问我需要切哪些图标;糗了一眼,我只说了要中间最小的图标就行了。其他的都可以自己画的嘛。。。。(其实用图片搬砖效率还是更快一点,不过本人还是有点傲娇······)
好久没用
Canvas画过东西了,看了一下外边4个角就是8条线,里面画一个圆角矩形就行了。
先看下本菜逼做的效果图吧,
,没错效果就是TM这么挫,要做好看一点,可以自己弄。。。
先上代码吧。
/** * 用canvas画只有一个角是圆角的矩形,请用{@link android.graphics.drawable.shapes.RoundRectShape} <br> * Created by Tangxb on 2016/7/13. */ public class FourRoundView extends View { private Paint mPaint; private Paint mPaint2; private int mWidth; private int mHeight; private float mStrokeWidth; private float mLineWidth; private int mLineColor; private float rx; private float ry; private RectF rectF; public FourRoundView(Context context) { this(context, null); } public FourRoundView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public FourRoundView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public FourRoundView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context, attrs); } private void init(Context context, AttributeSet attrs) { TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.FourRoundView); mLineWidth = ta.getDimension(R.styleable.FourRoundView_lineWidth, dip2px(10)); mStrokeWidth = ta.getDimension(R.styleable.FourRoundView_strokeWidth, dip2px(10)); mLineColor = ta.getColor(R.styleable.FourRoundView_lineColor, Color.BLACK); ta.recycle(); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(mLineColor); mPaint.setStrokeWidth(mStrokeWidth); mPaint2 = new Paint(mPaint); mPaint2.setStrokeJoin(Paint.Join.ROUND); mPaint2.setStyle(Paint.Style.STROKE); mPaint2.setStrokeWidth(mStrokeWidth / 2); rx = 10; ry = 10; } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mWidth = w; mHeight = h; rectF = new RectF(mWidth / 2F - 50F, mHeight / 2F - 50F, mWidth / 2F + 50F, mHeight / 2F + 50F); } /** * <a href="http://stackoverflow.com/questions/15309029/android-paint-stroke-width-positioning">the stoke is always centered</a> <br> * 这里不用0,用的<code>mStrokeWidth / 2F</code>替换0;原因请看上面的链接 * * @param canvas */ @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 左上角 canvas.drawLine(0, mStrokeWidth / 2F, mLineWidth, mStrokeWidth / 2F, mPaint); canvas.drawLine(mStrokeWidth / 2F, mStrokeWidth / 2F, mStrokeWidth / 2F, mLineWidth, mPaint); // 左下角 canvas.drawLine(mStrokeWidth / 2F, mHeight - mLineWidth, mStrokeWidth / 2F, mHeight, mPaint); canvas.drawLine(mStrokeWidth / 2F, mHeight - mStrokeWidth / 2F, mLineWidth, mHeight - mStrokeWidth / 2F, mPaint); // 右上角 canvas.drawLine(mWidth - mLineWidth, mStrokeWidth / 2F, mWidth, mStrokeWidth / 2F, mPaint); canvas.drawLine(mWidth - mStrokeWidth / 2F, mStrokeWidth / 2F, mWidth - mStrokeWidth / 2F, mLineWidth, mPaint); // 右下角 canvas.drawLine(mWidth - mStrokeWidth / 2F, mHeight - mLineWidth, mWidth - mStrokeWidth / 2F, mHeight, mPaint); canvas.drawLine(mWidth - mLineWidth, mHeight - mStrokeWidth / 2F, mWidth, mHeight - mStrokeWidth / 2F, mPaint); canvas.drawRoundRect(rectF, rx, ry, mPaint2); } /** * 将dip或dp值转换为px值,保证尺寸大小不变 * * @param dipValue * @return */ public int dip2px(float dipValue) { final float scale = getContext().getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); } }
附上
four_round_attrs.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="FourRoundView"> <attr name="lineWidth" format="dimension|reference" /> <attr name="strokeWidth" format="dimension|reference" /> <attr name="lineColor" format="color|reference" /> </declare-styleable> </resources>
可能你已经注意到我在代码中写的注释了,如果只想实现画一个圆角的矩形请用
RoundRectShape,同时在
onDraw里面没有使用0这个点,是因为设置了
strokeWidth,会让坐标偏移(the stoke is always centered)
虽然很简单,主要是好久没写博客,简单滴冒个泡泡。。。。。
相关文章推荐
- HTML5调用摄像头实例
- 马化腾亲自“站台” 企业微信和个人微信互通能带来什么?
- Canvas 在高清屏下绘制图片变模糊的解决方法
- 批处理制作二维码生成器
- jQuery qrcode生成二维码的方法
- 使用canvas实现仿新浪微博头像截取上传功能
- js+HTML5实现canvas多种颜色渐变效果的方法
- javascript+HTML5的Canvas实现Lab单车动画效果
- js+canvas绘制矩形的方法
- JavaScript+html5 canvas制作的百花齐放效果完整实例
- 使用jquery.qrcode.min.js实现中文转化二维码
- jquery插件qrcode在线生成二维码
- jQuery+canvas实现的球体平抛及颜色动态变换效果
- JavaScript生成二维码图片小结
- php制作中间带自己定义图片二维码的方法
- zbar解码二维码和条形码示例
- php使用qr生成二维码的示例分享
- php实现扫描二维码根据浏览器类型访问不同下载地址
- PHP微信开发之二维码生成类
- html5 canvas js(数字时钟)实例代码