Android开发-----03-使用Canvas绘制虚线……

来源:互联网 发布:淘宝买家如何导出订单 编辑:程序博客网 时间:2024/05/18 01:41

本章只关注绘制虚线,不关注Canvas的其它操作。

Android中,Canvas的功能都非常强大,一般情况下,用到了就去研究,用不到就懒得理会它。但是随着项目的需求不断增加,再怎么不想了解Canvas,也会或多或少的和这玩意儿接触。

例如在Android中,如果自定义的控件需要使用虚线该怎么完成呢。

1、  可以使用美工,让美工进行切图

2、  可以自己使用画笔进行绘制

现在提供这两种方式的操作:

package com.example.aaaaa;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.DashPathEffect;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.Path;import android.util.AttributeSet;import android.view.View;public class MyView extends View {/** 中央分割线的绘制  **/    private Paint linePaint;    private Paint strockpaint;    private Paint p;private Bitmap decodeResource;public MyView(Context context, AttributeSet attrs) {super(context, attrs);linePaint = new Paint();linePaint.setAntiAlias(true);//linePaint.setColor(Color.parseColor("#aeaeae"));linePaint.setColor(Color.RED);linePaint.setStrokeWidth(2f);linePaint.setTextSize(25);linePaint.setStrokeJoin(Paint.Join.ROUND);strockpaint = new Paint();strockpaint.setAntiAlias(true);strockpaint.setStyle(Paint.Style.STROKE);  strockpaint.setColor(Color.BLUE);DashPathEffect effects = new DashPathEffect(new float[]{5,5,5,5},1);  strockpaint.setPathEffect(effects);p = new Paint(Paint.ANTI_ALIAS_FLAG);p.setStyle(Style.STROKE);p.setColor(Color.RED);p.setStrokeWidth(1);p.setTextSize(30);p.setStrokeWidth(10);DashPathEffect effects1 = new DashPathEffect(new float[] { 1, 4, 7, 8}, 1);p.setPathEffect(effects1);decodeResource = BitmapFactory.decodeResource(getResources(),R.drawable.seat_center_line);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawLine(100, 0, 600, 1000, linePaint);canvas.drawCircle(202, 202, 100, strockpaint);canvas.drawLine(0, 0, 400, 400, strockpaint);canvas.drawRect(20, 100, 21, 450, strockpaint);canvas.drawText("绘制红色的虚线", 210, 300, linePaint);canvas.drawLine(200, 140, 500, 40, p);//绘制红色的虚线Path path = new Path();path.moveTo(200, 300);path.lineTo(300, 1600);<span style="color:#009900;">//关注:①使用Canvas绘制虚线</span>canvas.drawPath(path , p);<span style="color:#009900;">//关注:②使用Canvas绘制虚线Bitmap--图片是虚线的</span>canvas.drawBitmap(createRepeaterY(1000, decodeResource), 300, 300, null);}//绘制重复bitmap的图片public Bitmap createRepeaterY(int height, Bitmap src){int count = (height + src.getHeight() - 1) / src.getHeight();Bitmap bitmap = Bitmap.createBitmap(src.getWidth(), height, Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);for(int idx = 0; idx < count; ++ idx){canvas.drawBitmap(src, 0, idx * src.getHeight(), null);}return bitmap;}}
效果图如下:

当然也可是使用drawRect达到虚线的效果,但是如果一个控件要求有缩放的功能,那么drawRect绘制的虚线会在所放的时候连接到一块,变成了波浪线。

项目中用到的图片:



0 0
原创粉丝点击