国产精品无码av有声小说-天堂av2024-久久国产剧情-午夜视频一区-国内自拍xxxx18-男女啪啪免费-在线国产福利-中文字幕在线三区-天天艹日日干-色眯眯视频-天天干天天操天天爱-性欧美丰满熟妇xxxx性久久久-精品国产一区二区在线-污视频网站免费在线观看-98久久久-日日夜夜爽爽-乌克兰性欧美精品高清

歡迎來到酷云建站平臺,全網(wǎng)營銷云系統(tǒng)加盟中心!

海量企業(yè)網(wǎng)站模板 · 任您選擇

美出特色,精出品質(zhì),一切為了企業(yè)更好的營銷

隱藏側(cè)欄
Beta
轉(zhuǎn)載

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

       小程序     2021-12-16     admin     20     0    

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

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

protected void onDraw(Canvas canvas)

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

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

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

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

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

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

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

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

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

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

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


--結(jié)束END--

本文鏈接: http://www.sh-linbin.cn/start/2390.html (轉(zhuǎn)載時請注明來源鏈接)

 
本文標(biāo)簽: 全部

下班PC閱讀不方便?

手機(jī)也可以隨時學(xué)習(xí)開發(fā)

微信關(guān)注公眾號“酷云”
"酷云平臺前端開發(fā)教學(xué)"
每日干貨技術(shù)分享
 

×

成為 酷云平臺 代理商!

關(guān)注

微信
關(guān)注

微信掃一掃
獲取最新優(yōu)惠信息

酷云平臺公眾號

客服

聯(lián)系
客服

很高興為您服務(wù)
尊敬的用戶,歡迎您咨詢,我們?yōu)樾掠脩魷?zhǔn)備了優(yōu)惠好禮。 咨詢客服

聯(lián)系客服:

在線QQ: 3206174

客服電話: 0516-83703228

售前咨詢 售后服務(wù)
在線交談 智能小云

工作時間:

周一至周五: 09:00 - 17:00

WAP

手機(jī)
訪問

移動端訪問
手機(jī)上也能選模板

酷云平臺手機(jī)端

榆社县| 车险| 平乐县| 青田县| 临泽县| 射洪县| 昌江| 兴国县| 华亭县| 南宫市| 尤溪县| 哈巴河县| 任丘市| 全椒县| 唐海县| 泸定县| 富宁县| 静宁县| 罗定市| 嘉祥县| 都江堰市| 仙游县| 昌乐县| 吴桥县| 随州市| 古浪县| 神木县| 凤翔县| 和田市| 和平区| 玉龙| 樟树市| 诸暨市| 沙洋县| 乌鲁木齐县| 平安县| 美姑县| 正安县| 巴南区| 汕头市| 德惠市|