欧美亚洲大片-国产免费成人在线视频-国产成人8x人在线视频软件-日韩亚洲欧美中文字幕-97伦伦午夜电影理伦片-亚洲综合精品视频-曰本女人牲交高潮视频-久久久精品欧美-天天干天天操天天碰-精品国产乱码久久久久久1区2区-黄色一级免费片-在线免费欧美-国产成人精品在线视频-精人妻一区二区三区-香蕉视频2020-综合久久99-欧美日韩亚洲国产综合

十年專注于品牌網(wǎng)站建設(shè) 十余年專注于網(wǎng)站建設(shè)_小程序開(kāi)發(fā)_APP開(kāi)發(fā),低調(diào)、敢創(chuàng)新、有情懷!
南昌百恒網(wǎng)絡(luò)微信公眾號(hào) 掃一掃關(guān)注
小程序
tel-icon全國(guó)服務(wù)熱線:400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
掃一掃打開(kāi)百恒網(wǎng)絡(luò)微信小程序

百恒網(wǎng)絡(luò)

南昌百恒網(wǎng)絡(luò)

View視圖中使用onDraw(...)方法實(shí)現(xiàn)圖形繪制

百恒網(wǎng)絡(luò) 2017-07-31 7264

我想南昌APP開(kāi)發(fā)技術(shù)人員都知道這樣一個(gè)情況,應(yīng)用啟動(dòng)時(shí),所有視圖都處于無(wú)效狀態(tài)。也就是說(shuō),視圖還沒(méi)有繪制到屏幕上。為解決這個(gè)問(wèn)題,Android調(diào)用了頂級(jí)View視圖的draw()方法。這會(huì)引起自上而下的鏈?zhǔn)秸{(diào)用反應(yīng)。首先,視圖完成自我繪制,然后是子視圖的自我繪制,再然后是子視圖的子視圖的自我繪制,如此調(diào)用下去直至繼承結(jié)構(gòu)的末端。當(dāng)繼承結(jié)構(gòu)中的所有視圖都完成自我繪制后,最頂級(jí)View視圖也就生效了。

為加入這種繪制,可覆蓋以下View方法:

protected void onDraw(Canvas canvas)

在onTouchEvent(...)方法中響應(yīng)ACTION_MOVE動(dòng)作時(shí),我們調(diào)用invalidate()方法再次讓BoxDrawingView處于失效狀態(tài)。這迫使它重新完成自我繪制,并再次調(diào)用onDraw(...)方法。

現(xiàn)在我們一起來(lái)看看Canvas參數(shù)。Canvas和Paint是Android系統(tǒng)的兩大繪制類。

1、Canvas類擁有我們需要的所有繪制操作,其方法可決定繪在哪里以及繪什么,比如線條、圓形、字詞、矩形等。

2、Paint類決定如何繪制。其方法可指定繪制圖形的特征,例如是否填充圖形、使用什么字體繪制、線條是什么顏色等。

返回BoxDrawingView.java中,在BoxDrawingView的XML構(gòu)造方法中創(chuàng)建兩個(gè)Paint對(duì)象,如下代碼所示。

創(chuàng)建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對(duì)象的支持,現(xiàn)在就能夠在屏幕上繪制矩形框了,如下代碼所示。

覆蓋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制作開(kāi)發(fā)公司小編有必要解釋一下的就是,以上代碼的第一部分簡(jiǎn)單直接:使用米白背景paint,填充canvas以襯托矩形框。然后,針對(duì)矩形框數(shù)組中的每一個(gè)矩形框,據(jù)其兩點(diǎn)坐標(biāo),確定矩形框上下左右的位置。繪制時(shí),左端和頂端的值作為最小值,右端和底端的值作為最大值。

完成位置坐標(biāo)值計(jì)算后,調(diào)用Canvas.drawRect(...)方法,在屏幕上繪制紅色矩形框。最后運(yùn)行DragAndDraw應(yīng)用,嘗試?yán)L制一些紅色矩形框,如下圖所示。

程序員式的情緒表達(dá)

程序員式的情緒表達(dá)

這樣我們就創(chuàng)建了一個(gè)捕捉其觸摸事件并執(zhí)行繪制的視圖。

以上便是小編為大家介紹的關(guān)于在View視圖中使用onDraw(...)方法實(shí)現(xiàn)圖形繪制的過(guò)程,如果還有哪些不太明白的地方,可隨時(shí)來(lái)電和我們聯(lián)系,我們專業(yè)為您解答。此外,了解更多關(guān)于南昌網(wǎng)站建設(shè)、微信開(kāi)發(fā)、網(wǎng)站推廣等方面的資訊,歡迎訪問(wèn)百恒網(wǎng)絡(luò)官網(wǎng)動(dòng)態(tài),更多精彩文章與您分享!


400-680-9298,0791-88117053
掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號(hào)
掃一掃打開(kāi)百恒網(wǎng)絡(luò)小程序

歡迎您的光顧,我們將竭誠(chéng)為您服務(wù)×

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務(wù) 售后服務(wù)
 
售后服務(wù) 售后服務(wù)
 
備案專線 備案專線
 
×
双辽市| 革吉县| 通州区| 禹城市| 和林格尔县| 湘阴县| 安乡县| 喀喇沁旗| 堆龙德庆县| 柏乡县| 日喀则市| 琼海市| 乌拉特中旗| 吴桥县| 乐陵市| 和硕县| 梁山县| 西畴县| 扶风县| 蓝田县| 沙坪坝区| 开鲁县| 瓦房店市| 枣强县| 莲花县| 潼南县| 玛纳斯县| 镇安县| 聂荣县| 沂南县| 荥阳市| 綦江县| 乳山市| 宁蒗| 宁晋县| 阜新市| 兴隆县| 独山县| 梓潼县| 昌宁县| 响水县|