十年专注于品牌网站建设 十年专注于品牌网站建设,低调、高逼格、有情怀的网络应用服务商!
南昌百恒网络微信公众号 扫一扫关注
小程序
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络微信小程序

百恒网络

南昌百恒网络

View视图中使用onDraw(...)方法实现图形绘制

百恒网络 2017-07-31 208

我想南昌APP开发技术人员都知道这样一个情况,应用启动时,所有视图都处于无效状态。也就是说,视图还没有绘制到屏幕上。为解决这个问题,Android调用了顶级View视图的draw()方法。这会引起自上而下的链式调用反应。首先,视图完成自我绘制,然后是子视图的自我绘制,再然后是子视图的子视图的自我绘制,如此调用下去直至继承结构的末端。当继承结构中的所有视图都完成自我绘制后,最顶级View视图也就生效了。

为加入这种绘制,可覆盖以下View方法:

protected void onDraw(Canvas canvas)

在onTouchEvent(...)方法中响应ACTION_MOVE动作时,我们调用invalidate()方法再次让BoxDrawingView处于失效状态。这迫使它重新完成自我绘制,并再次调用onDraw(...)方法。

现在我们一起来看看Canvas参数。Canvas和Paint是Android系统的两大绘制类。

1、Canvas类拥有我们需要的所有绘制操作,其方法可决定绘在哪里以及绘什么,比如线条、圆形、字词、矩形等。

2、Paint类决定如何绘制。其方法可指定绘制图形的特征,例如是否填充图形、使用什么字体绘制、线条是什么颜色等。

返回BoxDrawingView.java中,在BoxDrawingView的XML构造方法中创建两个Paint对象,如下代码所示。

创建Paint(BoxDrawingView.java)

public class BoxDrawingView extends View {

private static final String TAG = "BoxDrawingView";

private Box mCurrentBox;

private List mBoxen = new ArrayList<>();

private Paint mBoxPaint;

private Paint mBackgroundPaint;

...

// Used when inflating the view from XML

public BoxDrawingView(Context context, AttributeSet attrs) {

super(context, attrs);

// Paint the boxes a nice semitransparent red (ARGB)

mBoxPaint = new Paint();

mBoxPaint.setColor(0x22ff0000);

// Paint the background off-white

mBackgroundPaint = new Paint();

mBackgroundPaint.setColor(0xfff8efe0);

}

}

有了Paint对象的支持,现在就能够在屏幕上绘制矩形框了,如下代码所示。

覆盖onDraw(Canvas)方法(BoxDrawingView.java)

public BoxDrawingView(Context context, AttributeSet attrs) {

...

}

@Override

protected void onDraw(Canvas canvas) {

// Fill the background

canvas.drawPaint(mBackgroundPaint);

for (Box box : mBoxen) {

float left = Math.min(box.getOrigin().x, box.getCurrent().x);

float right = Math.max(box.getOrigin().x, box.getCurrent().x);

float top = Math.min(box.getOrigin().y, box.getCurrent().y);

float bottom = Math.max(box.getOrigin().y, box.getCurrent().y);

canvas.drawRect(left, top, right, bottom, mBoxPaint);

}

}

到了这里,南昌APP制作开发公司小编有必要解释一下的就是,以上代码的第一部分简单直接:使用米白背景paint,填充canvas以衬托矩形框。然后,针对矩形框数组中的每一个矩形框,据其两点坐标,确定矩形框上下左右的位置。绘制时,左端和顶端的值作为最小值,右端和底端的值作为最大值。

完成位置坐标值计算后,调用Canvas.drawRect(...)方法,在屏幕上绘制红色矩形框。最后运行DragAndDraw应用,尝试绘制一些红色矩形框,如下图所示。

程序员式的情绪表达

程序员式的情绪表达

这样我们就创建了一个捕捉其触摸事件并执行绘制的视图。

以上便是小编为大家介绍的关于在View视图中使用onDraw(...)方法实现图形绘制的过程,如果还有哪些不太明白的地方,可随时来电和我们联系,我们专业为您解答。此外,了解更多关于南昌网站建设、微信开发、网站推广等方面的资讯,欢迎访问百恒网络官网动态,更多精彩文章与您分享!


400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络小程序

欢迎您的光顾,我们将竭诚为您服务×

售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售后服务 售后服务
 
售后服务 售后服务
 
备案专线 备案专线
 
×