日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

画了个Android

發布時間:2023/11/30 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 画了个Android 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

畫了個Android

?

?

?? 今晚瞎折騰,閑著沒事畫了個機器人——android,浪費了一個晚上的時間。畫這丫還真不容易,為那些坐標,差點砸了鍵盤,好在最后畫出個有模有樣的,心稍安。

?? 下面來看看畫這么個機器人需要些什么東西:主要是Canvas類(android.graphics.Canvas)。Canvas類就是表示一塊畫布,你可以在上面畫你想畫的東西。當然,你還可以設置畫布的屬性,如畫布的顏色/尺寸等。Canvas提供了如下一些方法:


?? ?Canvas():創建一個空的畫布,可以使用setBitmap()方法來設置繪制的具體畫布;


?? ?Canvas(Bitmap bitmap):以bitmap對象創建一個畫布,則將內容都繪制在bitmap上,bitmap不得為null;


?? ?Canvas(GL gl):在繪制3D效果時使用,與OpenGL有關;


?? ?drawColor:設置畫布的背景色;


?? ?setBitmap:設置具體的畫布;


?? ?clipRect:設置顯示區域,即設置裁剪區;


?? ?isOpaque:檢測是否支持透明;


?? ?rotate:旋轉畫布;

?

??下面我們就用Canvas來畫一個機器人——android,oh my love!一看就知道,機器人的外形是由矩形/圓/圓弧/線條組成的,因此要知道怎么用Canvas畫矩形/圓/圓弧和線條。可惜阿,上面幾個方法基本都沒用上。


?? ?canvas.drawRect(RectF,Paint)方法用于畫矩形,第一個參數為圖形顯示區域,第二個參數為畫筆,設置好圖形顯示區域Rect和畫筆Paint后,即可畫圖;


?? ?canvas.drawRoundRect(RectF, float, float, Paint) 方法用于畫圓角矩形,第一個參數為圖形顯示區域,第二個參數和第三個參數分別是水平圓角半徑和垂直圓角半徑。


?? ?canvas.drawLine(startX, startY, stopX, stopY, paint):前四個參數的類型均為float,最后一個參數類型為Paint。表示用畫筆paint從點(startX,startY)到點(stopX,stopY)畫一條直線;


?? ?canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint):第一個參數oval為RectF類型,即圓弧顯示區域,startAngle和sweepAngle均為float類型,分別表示圓弧起始角度和圓弧度數,3點鐘方向為0度,useCenter設置是否顯示圓心,boolean類型,paint為畫筆;


?? ?canvas.drawCircle(float,float, float, Paint)方法用于畫圓,前兩個參數代表圓心坐標,第三個參數為圓半徑,第四個參數是畫筆;


???清楚這些函數的用法之后,我們是否就噼里啪啦地敲代碼了呢?別急,我們來搞個設計。既然這些函數都是用來畫圖的,也就是說它們有共性——畫。所有我們應該設計一個接口interface,對于這次任務,只需要一個成員方法就足夠了。對于每一個圖形,是只用一個方法畫,還是將畫圖封裝成類呢?我建議是封裝成類。因為說不定你明天就會嫌棄它不會動,想它動起來,或者你過兩天又希望在機器人的每個部位加點什么。所以我將每一個圖形封裝成類,都實現一個名叫drawGraphics的接口。最后,要記得給UI創建一個線程哦。


???就這樣我開始動手做了,但是很快就發現問題了。什么問題?在定位的時候,也就是設置每個圖形的顯示區域時,我自以為這里的Rect跟Java的Rectangle是一樣的,但我錯了。原來這廝跟MFC中的RECT結構才是一家人,害我折騰了許久。


????Rect(int left,int top,int right,int bottom)

?

?? ?left

?? ? ? ? ? ???矩形左上角X坐標值

????top

?? ? ? ? ? ? ?矩形左上角Y坐標值

?? ?right

?? ? ? ? ? ? ?矩形右下角X坐標值

????bottom

?? ? ? ? ? ? ?矩形右下角Y坐標值


???下面借用一張圖說明(忘了哪個博客找來的(*^__^*) 嘻嘻……),如Rect(150, 75, 260, 120) 一目了然吧。


?


?? ?還有一點非常重要的是,屏幕最上方的狀態欄和標題欄總占去來50的高度,同時坐標原點下移到標題欄下方,即如果你的手機屏幕分辨率為(320X480),編程時如果沒有設置去除狀態欄和標題欄,你只能操控的范圍只有(320X430),而且坐標原點下移。記住咯。

?

//drawGraphics.java

package??com.scgm.android.drawable;

import?android.graphics.Canvas;

?

?

public?interface??drawGraphics {

public?void??draw(Canvas canvas);

}

?

?

?

package??com.scgm.android.drawable;

?

import?android.content.Context;

import??android.graphics.Canvas;

import?android.graphics.Color;

import?android.graphics.Paint;

import?android.view.View;

?

?

?

public?classGameView ?extends?View ?implements??Runnable{

?

?? ? ? ?//聲明Paint對象

?? ? ? private??Paint mPaint= null;

?? ? ? privatedrawGraphics drawGraphics= null;

?

?? ? ?

?? ? ? public?GameView(Context context) {

?? ? ? ? ? ?super(context);

?? ? ? ? ? // TODOAuto-generated constructor stub

?? ? ? ? ? //構建對象

?? ? ? ? ? mPaint= new?Paint();

?? ? ? ? ? //開啟線程

?? ? ? ? ? new??Thread(this).start();

?? ? ? }

?

?? ? ? public?void??onDraw(Canvas canvas) {

?? ? ? ? ? super.onDraw(canvas);

?? ? ? ? ? //設置畫布為黑色背景

?? ? ? ? ? //canvas.drawColor(Color.BLACK);

?? ? ? ? ? //消除鋸齒

?? ? ? ? ? mPaint.setAntiAlias(true);

?? ? ? ? ?//設置圖形為空心

?? ? ? ? ? mPaint.setStyle(Paint.Style.STROKE);

?? ? ? ? ? //繪制空心幾何圖形

?? ? ? ? ? drawGraphics= ?new??DrawCircle();

?? ? ? ? ? drawGraphics.draw(canvas);

?? ? ? ? ? drawGraphics= ?new??DrawLine();

?? ? ? ? ? drawGraphics.draw(canvas);

?? ? ? ? ? drawGraphics= newDrawRect();

?? ? ? ? ? drawGraphics.draw(canvas);

?? ? ? }

?

?? ? ? ?

?? ? ? ? ?@Override

?? ? ? ? ?public?void?run() {

?? ? ? ? ? ? ? // TODOAuto-generated method stub

?? ? ? ? ? ? ? while(!Thread.currentThread().isInterrupted()) {

?? ? ? ? ? ? ? ? ? ?try{

?? ? ? ? ? ? ? ? ? ? ? ? ?Thread.sleep(1000);

?? ? ? ? ? ? ? ? ? ?} catch(InterruptedException e) {

?? ? ? ? ? ? ? ? ? ? ?// TODO: handle exception

?? ? ? ? ? ? ? ? ? ? ?Thread.currentThread().interrupt();

?? ? ? ? ? ? ? ? ? ?}

?? ? ? ? ? ? ? ? ? ? //使用postInvalidate 可以直接在線程中更新界面

?? ? ? ? ? ? ? ? ? ? ?postInvalidate();?

?? ? ? ? ? ? ? }

?? ? ? ? }

?

}

?

//DrawRect.java

package?com.scgm.android.drawable;

?

import?android.graphics.Canvas;

import?android.graphics.Color;

import?android.graphics.Paint;

import?android.graphics.RectF;

?

?

?

public?class?DrawRect ?implements??drawGraphics{

?

?? ? ? private??Paint paint= ?null;

?

?? ? ? public?DrawRect(){

?? ? ? paint= new??Paint();

}

?

?? ? ?

?? ? ? ? @Override

?? ? ? ? public?void??draw(Canvas canvas) {

?? ? ? ? ? ? // TODOAuto-generated method stub

?? ? ? ? ? ? //定義圓角矩形對象

?? ? ? ? ? ? RectF rectF1 = newRectF(120,170,370,500);

?? ? ? ? ? ? RectF rectF2 = newRectF(40,150,90,400);

?? ? ? ? ? ? RectF rectF3 = newRectF(390,150,440,400);

?? ? ? ? ? ? RectF rectF4 = newRectF(140,520,200,650);

?? ? ? ? ? ? RectF rectF5 = newRectF(290,520,350,650);

?? ? ? ? ? ? paint.setAntiAlias(true);

?? ? ? ? ? ? //設置畫筆顏色為BLUE

?? ? ? ? ? ? paint.setColor(Color.GREEN);

?? ? ? ? ? ? //在畫布上繪制圓角矩形/圓弧/直線

?? ? ? ? ? ? canvas.drawRoundRect(rectF1, 20, 20, paint);

?? ? ? ? ? ? canvas.drawRoundRect(rectF2, 20, 20, paint);

?? ? ? ? ? ? canvas.drawRoundRect(rectF3, 20, 20, paint);

?? ? ? ? ? ? canvas.drawRoundRect(rectF4, 20, 20, paint);

?? ? ? ? ? ? canvas.drawRoundRect(rectF5, 20, 20, paint);

?? ? ? ?}

}

?

//DrawLine.java

package??com.scgm.android.drawable;

?

import?android.graphics.Canvas;

import??android.graphics.Color;

import?android.graphics.Paint;

?

?

public?class?DrawLine ?implements??drawGraphics{

?

?? ? ? private?Paint paint= ?null;

?

?? ? ? public??DrawLine(){

?? ? ? ? ? paint= ?new??Paint();

?? ? ? }

?? ? ?

?? ? ? ?@Override

?? ? ? ?publicvoiddraw(Canvas canvas) {

?? ? ? ? ? ?// TODOAuto-generated method stub

?? ? ? ? ? ?paint.setAntiAlias(true);

?? ? ? ? ? ?//繪制直線

?? ? ? ? ? ?paint.setColor(Color.GREEN);

?? ? ? ? ? ?//設置線條粗細

?? ? ? ? ? ?paint.setStrokeWidth(12);

?? ? ? ? ? ?canvas.drawLine(120,40,170,90, paint);

?? ? ? ? ? ?canvas.drawLine(320,90,370,40, paint);

?? ? ? }

}

?

//DrawCircle.java

package?com.scgm.android.drawable;

?

import?android.graphics.Canvas;

import??android.graphics.Color;

import??android.graphics.Paint;

import?android.graphics.RectF;

?

?

public?class?DrawCircle ?implements??drawGraphics{

?

?? ? ? ?private??Paint paint= ?null;

?? ? ? ?private??Paint paint_eye= ?null;

?

?? ? ? ?public??DrawCircle(){

?? ? ? ?paint= new??Paint();

?? ? ? ?paint_eye= new??Paint();

}

?? ? ?

?? ? ? ?@Override

?? ? ? ?public??void?draw(Canvas canvas) {

?? ? ? ? ? ? // TODOAuto-generated method stub

?? ? ? ? ? ? //繪制圓形(圓心x,圓心y,半徑r,畫筆p)

?? ? ? ? ? ? paint_eye.setAntiAlias(true);

?? ? ? ? ? ? paint.setAntiAlias(true);

?? ? ? ? ? ? RectF rectF = newRectF(120,60,370,240);

?? ? ? ? ? ? paint_eye.setColor(Color.WHITE);

?? ? ? ? ? ? paint.setColor(Color.GREEN);

?? ? ? ? ? ? canvas.drawCircle(190, 110, 18, paint_eye);

?? ? ? ? ? ? canvas.drawCircle(300, 110, 18, paint_eye);

?? ? ? ? ? ? canvas.drawArc(rectF, 180, 180,true, paint);

?? ? ? ?}

}

?

//GameStart.java

package??com.scgm.android.drawable;

?

import??android.app.Activity;

import?android.os.Bundle;?

?

public?class?GameStart ?extends??Activity {

?

?? ? ?private??GameView mGameView= ?null;?

?

?? ?

?? ? ?@Override

?? ? ?public??void??onCreate(Bundle??savedInstanceState) {?

?? ? ? ? ?super.onCreate(savedInstanceState);

?? ? ? ? ?this.mGameView= newGameView(this);

?? ? ? ? ?setContentView(mGameView);

?? ? ?}

}

?

?

運行效果圖:


?? ? ? ? ? ? ? ? ? ? ? ?

?

?

?

?? ? ?還可以吧:-)

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的画了个Android的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天躁日日摸久久久精品 | 欧美激情免费在线观看 | 国产日日日 | 操操操爽爽爽 | 精品自拍第一页 | 日韩在线播放av | 天天操网站| 视频一区二区国产 | 久久久久无码精品国产sm果冻 | 91不卡在线 | 91免费国产在线 | 伊人22综合| 久久久久久久久久久久久久国产 | 欧美熟妇另类久久久久久多毛 | 国产精品无码久久久久久电影 | 小早川怜子久久精品中文字幕 | 青青草视频免费播放 | 成人7777| 久久精品一区二区免费播放 | 尤物视频在线观看国产性感 | 污视频在线网站 | 轻点好疼好大好爽视频 | 91美女片黄在线观看 | 毛片123 | 久久在线免费视频 | www.九九热| 国模人体私拍xvideos | 免费看女生裸体视频 | 亚洲乱码一区二区 | 亚洲一级在线 | 美女爽爽爽 | 国语对白自拍 | 可以免费看黄的网站 | 69av导航 | 国产一av | 亚洲av无码国产精品麻豆天美 | 成人你懂的 | 涩视频在线观看 | 久久一视频 | 一区不卡av | 国产18一19sex性护士 | 精品xxx| 69精品久久 | 99reav| 激情欧美综合 | jizz中文字幕 | 久久伊人成人 | 日本视频二区 | 亚洲国产日韩精品 | 成人婷婷| 狠狠a| 国产手机精品视频 | 国产一区二区视频在线 | 又大又粗弄得我出好多水 | 久久综合色网 | 疯狂做受xxxx国产 | 亚洲第三十七页 | 国产青青青 | 精品人妻在线播放 | 欧美午夜精品久久久 | 小视频在线免费观看 | 搡国产老太xxx网站 高h喷汁呻吟3p | 性做久久久久久久久 | 五月婷婷网 | 神马久久精品 | 人人插人人插 | 一级a毛片 | 在线永久看片免费的视频 | cao国产| 国内偷拍一区二区 | 国产亚洲精品久久久久久无几年桃 | 中文字幕无码精品亚洲资源网久久 | 在线观看视频免费 | 久久xxxx | 性一交一乱一色一视频麻豆 | 久久精品国产一区二区三区 | 色婷婷av一区二区三区麻豆综合 | www.一区二区三区四区 | 亚洲电影一区二区三区 | 天天色天天看 | 国产精品毛片在线 | 国产黑丝在线视频 | 337p嫩模大胆色肉噜噜噜 | 午夜在线小视频 | 国偷自产视频一区二区久 | 伊人精品一区二区三区 | 丰满人妻一区二区三区免费视频 | av福利片| 日本一区二区三区免费视频 | 亚洲夜色 | 黄色污在线观看 | 亚洲视频日韩 | 免费成年人视频在线观看 | 超碰碰碰碰 | 夜夜夜久久久 | 在线日韩中文字幕 | 村上凉子av| 日韩成人高清视频 | 激情久久久久 |