内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

自定義android機器人-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)主打移動網(wǎng)站、成都網(wǎng)站設計、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設公司、網(wǎng)站改版、網(wǎng)絡推廣、網(wǎng)站維護、國際域名空間、等互聯(lián)網(wǎng)信息服務,為各行業(yè)提供服務。在技術實力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務,根據(jù)網(wǎng)站的內(nèi)容與功能再決定采用什么樣的設計。最后,要實現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設計,我們還會規(guī)劃穩(wěn)定安全的技術方案做保障。

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

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

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

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

   drawColor:設置畫布的背景色;

   setBitmap:設置具體的畫布;

   clipRect:設置顯示區(qū)域,即設置裁剪區(qū);

   isOpaque:檢測是否支持透明;

   rotate:旋轉(zhuǎn)畫布;

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

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

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

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

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

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

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

   就這樣我開始動手做了,但是很快就發(fā)現(xiàn)問題了。什么問題?在定位的時候,也就是設置每個圖形的顯示區(qū)域時,我自以為這里的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) 一目了然吧。

自定義android 機器人

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

//drawGraphics.java

package  com.scgm.android.drawable;

importandroid.graphics.Canvas;

public interface  drawGraphics {

public void  draw(Canvas canvas);

}

package  com.scgm.android.drawable;

importandroid.content.Context;

import  android.graphics.Canvas;

importandroid.graphics.Color;

importandroid.graphics.Paint;

importandroid.view.View;

public classGameView  extendsView  implements  Runnable{

     //聲明Paint對象

    private  PaintmPaint= null;

    privatedrawGraphics drawGraphics= null;

    publicGameView(Context context) {

       super(context);

      //TODOAuto-generated constructor stub

      //構建對象

      mPaint= newPaint();

      //開啟線程

      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 voidrun() {

        //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

packagecom.scgm.android.drawable;

importandroid.graphics.Canvas;

importandroid.graphics.Color;

importandroid.graphics.Paint;

importandroid.graphics.RectF;

public classDrawRect  implements  drawGraphics{

    private  Paintpaint=  null;

    publicDrawRect(){

    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;

importandroid.graphics.Canvas;

import  android.graphics.Color;

importandroid.graphics.Paint;

public classDrawLine  implements  drawGraphics{

    privatePaint 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

packagecom.scgm.android.drawable;

importandroid.graphics.Canvas;

import  android.graphics.Color;

import  android.graphics.Paint;

importandroid.graphics.RectF;

public classDrawCircle  implements  drawGraphics{

     private  Paintpaint=  null;

     private  Paintpaint_eye=  null;

     public  DrawCircle(){

     paint= new  Paint();

     paint_eye= new  Paint();

}

     @Override

     public  voiddraw(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;

importandroid.os.Bundle;

public classGameStart  extends  Activity {

    private  GameViewmGameView=  null;

    @Override

    public  void  onCreate(Bundle  savedInstanceState) {

      super.onCreate(savedInstanceState);

      this.mGameView= newGameView(this);

      setContentView(mGameView);

    }

}

運行效果圖:

             自定義android 機器人

      還可以吧?:-)

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網(wǎng)頁標題:自定義android機器人-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://m.rwnh.cn/article28/iehcp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、微信公眾號、營銷型網(wǎng)站建設、品牌網(wǎng)站制作、Google、網(wǎng)站設計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設
巴马| 玉门市| 淄博市| 肥乡县| 南城县| 麦盖提县| 康乐县| 高邑县| 宁海县| 冕宁县| 延长县| 昌都县| 凉城县| 白沙| 遂昌县| 长寿区| 靖州| 兴山县| 体育| 高安市| 化德县| 盐边县| 莱州市| 沧州市| 永胜县| 旌德县| 石阡县| 保靖县| 太仆寺旗| 新龙县| 杭州市| 十堰市| 鹤庆县| 历史| 大厂| 南阳市| 五台县| 永平县| 五台县| 定结县| 木兰县|