国产一区二区精品在线_午夜精品视频_亚洲国产高清高潮精品美女_久久久91_午夜精品视频_久久久久亚洲一区二区三区

Android應用之SurfaceView

來源:網絡

點擊:2442

A+ A-

所屬頻道:新聞中心

關鍵詞: Android,SurfaceView

        文章介紹了SurfaceView的用法。網上介紹SurfaceView的用法有很多,寫法也層出不同,例如繼承SurfaceView類,或者繼承SurfaceHolder.Callback類等,這個可以根據功能實際需要自己選擇,我這里就直接在普通的用戶界面調用SurfaceHolder的lockCanvas和unlockCanvasAndPost。

        先來看看程序運行的截圖:

    截圖1主要演示了直接把正弦波繪畫在SurfaceView上

     

    對比上面的左右兩圖,右圖用.lockCanvas(null),而左圖用.lockCanvas(new Rect(oldX, 0, oldX + length,
        getWindowManager().getDefaultDisplay().getHeight())),對比一下兩個效果,由于左圖是按指定Rect繪畫,所以效率會比右圖的全控件繪畫高些,并且在清屏之后(canvas.drawColor(Color.BLACK))不會留有上次繪畫的殘留。

     

    接下來貼出main.xml的源碼:

    view plaincopy to clipboardprint?
    <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="fill_parent" android:layout_height="fill_parent" 
        android:orientation="vertical"> 
     
        <LinearLayout android:id="@+id/LinearLayout01" 
            android:layout_width="wrap_content" android:layout_height="wrap_content"> 
            <Button android:id="@+id/Button01" android:layout_width="wrap_content" 
                android:layout_height="wrap_content" android:text="簡單繪畫"></Button> 
            <Button android:id="@+id/Button02" android:layout_width="wrap_content" 
                android:layout_height="wrap_content" android:text="定時器繪畫"></Button> 
        </LinearLayout> 
        <SurfaceView android:id="@+id/SurfaceView01" 
            android:layout_width="fill_parent" android:layout_height="fill_parent"></SurfaceView> 
    </LinearLayout> 
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent" android:layout_height="fill_parent"
     android:orientation="vertical">

     <LinearLayout android:id="@+id/LinearLayout01"
      android:layout_width="wrap_content" android:layout_height="wrap_content">
      <Button android:id="@+id/Button01" android:layout_width="wrap_content"
       android:layout_height="wrap_content" android:text="簡單繪畫"></Button>
      <Button android:id="@+id/Button02" android:layout_width="wrap_content"
       android:layout_height="wrap_content" android:text="定時器繪畫"></Button>
     </LinearLayout>
     <SurfaceView android:id="@+id/SurfaceView01"
      android:layout_width="fill_parent" android:layout_height="fill_parent"></SurfaceView>
    </LinearLayout>
     

    接下來貼出程序源碼:

    view plaincopy to clipboardprint?
    package com.testSurfaceView;  
     
    import java.util.Timer;  
    import java.util.TimerTask;  
     
    import android.app.Activity;  
    import android.graphics.Canvas;  
    import android.graphics.Color;  
    import android.graphics.Paint;  
    import android.graphics.Rect;  
    import android.os.Bundle;  
    import android.util.Log;  
    import android.view.SurfaceHolder;  
    import android.view.SurfaceView;  
    import android.view.View;  
    import android.widget.Button;  
     
    public class testSurfaceView extends Activity {  
        /** Called when the activity is first created. */ 
        Button btnSimpleDraw, btnTimerDraw;  
        SurfaceView sfv;  
        SurfaceHolder sfh;  
     
        private Timer mTimer;  
        private MyTimerTask mTimerTask;  
        int Y_axis[],//保存正弦波的Y軸上的點  
        centerY,//中心線  
        oldX,oldY,//上一個XY點   
        currentX;//當前繪制到的X軸上的點  
     
        @Override 
        public void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.main);  
     
            btnSimpleDraw = (Button) this.findViewById(R.id.Button01);  
            btnTimerDraw = (Button) this.findViewById(R.id.Button02);  
            btnSimpleDraw.setOnClickListener(new ClickEvent());  
            btnTimerDraw.setOnClickListener(new ClickEvent());  
            sfv = (SurfaceView) this.findViewById(R.id.SurfaceView01);  
            sfh = sfv.getHolder();  
     
            //動態繪制正弦波的定時器  
            mTimer = new Timer();  
            mTimerTask = new MyTimerTask();  
     
            // 初始化y軸數據  
            centerY = (getWindowManager().getDefaultDisplay().getHeight() - sfv  
                    .getTop()) / 2;  
            Y_axis = new int[getWindowManager().getDefaultDisplay().getWidth()];  
            for (int i = 1; i < Y_axis.length; i++) {// 計算正弦波  
                Y_axis[i - 1] = centerY  
                        - (int) (100 * Math.sin(i * 2 * Math.PI / 180));  
            }  
        }  
     
        class ClickEvent implements View.OnClickListener {  
     
            @Override 
            public void onClick(View v) {  
     
                if (v == btnSimpleDraw) {  
                    SimpleDraw(Y_axis.length-1);//直接繪制正弦波  
                  
                } else if (v == btnTimerDraw) {  
                    oldY = centerY;  
                    mTimer.schedule(mTimerTask, 0, 5);//動態繪制正弦波  
                }  
     
            }  
     
        }  
     
        class MyTimerTask extends TimerTask {  
            @Override 
            public void run() {  
     
                SimpleDraw(currentX);  
                currentX++;//往前進  
                if (currentX == Y_axis.length - 1) {//如果到了終點,則清屏重來  
                    ClearDraw();  
                    currentX = 0;  
                    oldY = centerY;  
                }  
            }  
     
        }  
          
        /* 
         * 繪制指定區域 
         */ 
        void SimpleDraw(int length) {  
            if (length == 0)  
                oldX = 0;  
            Canvas canvas = sfh.lockCanvas(new Rect(oldX, 0, oldX + length,  
                    getWindowManager().getDefaultDisplay().getHeight()));// 關鍵:獲取畫布  
            Log.i("Canvas:",  
                    String.valueOf(oldX) + "," + String.valueOf(oldX + length));  
     
            Paint mPaint = new Paint();  
            mPaint.setColor(Color.GREEN);// 畫筆為綠色  
            mPaint.setStrokeWidth(2);// 設置畫筆粗細  
     
            int y;  
            for (int i = oldX + 1; i < length; i++) {// 繪畫正弦波  
                y = Y_axis[i - 1];  
                canvas.drawLine(oldX, oldY, i, y, mPaint);  
                oldX = i;  
                oldY = y;  
            }  
            sfh.unlockCanvasAndPost(canvas);// 解鎖畫布,提交畫好的圖像  
        }  
     
        void ClearDraw() {  
            Canvas canvas = sfh.lockCanvas(null);  
            canvas.drawColor(Color.BLACK);// 清除畫布  
            sfh.unlockCanvasAndPost(canvas);  
     
        }  


    package com.testSurfaceView;

    import java.util.Timer;
    import java.util.TimerTask;

    import android.app.Activity;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Rect;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.View;
    import android.widget.Button;

    public class testSurfaceView extends Activity {
     /** Called when the activity is first created. */
     Button btnSimpleDraw, btnTimerDraw;
     SurfaceView sfv;
     SurfaceHolder sfh;

     private Timer mTimer;
     private MyTimerTask mTimerTask;
     int Y_axis[],//保存正弦波的Y軸上的點
     centerY,//中心線
     oldX,oldY,//上一個XY點
     currentX;//當前繪制到的X軸上的點

     @Override
     public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      btnSimpleDraw = (Button) this.findViewById(R.id.Button01);
      btnTimerDraw = (Button) this.findViewById(R.id.Button02);
      btnSimpleDraw.setOnClickListener(new ClickEvent());
      btnTimerDraw.setOnClickListener(new ClickEvent());
      sfv = (SurfaceView) this.findViewById(R.id.SurfaceView01);
      sfh = sfv.getHolder();

      //動態繪制正弦波的定時器
      mTimer = new Timer();
      mTimerTask = new MyTimerTask();

      // 初始化y軸數據
      centerY = (getWindowManager().getDefaultDisplay().getHeight() - sfv
        .getTop()) / 2;
      Y_axis = new int[getWindowManager().getDefaultDisplay().getWidth()];
      for (int i = 1; i < Y_axis.length; i++) {// 計算正弦波
       Y_axis[i - 1] = centerY
         - (int) (100 * Math.sin(i * 2 * Math.PI / 180));
      }
     }

     class ClickEvent implements View.OnClickListener {

      @Override
      public void onClick(View v) {

       if (v == btnSimpleDraw) {
        SimpleDraw(Y_axis.length-1);//直接繪制正弦波
       
       } else if (v == btnTimerDraw) {
        oldY = centerY;
        mTimer.schedule(mTimerTask, 0, 5);//動態繪制正弦波
       }

      }

     }

     class MyTimerTask extends TimerTask {
      @Override
      public void run() {

       SimpleDraw(currentX);
       currentX++;//往前進
       if (currentX == Y_axis.length - 1) {//如果到了終點,則清屏重來
        ClearDraw();
        currentX = 0;
        oldY = centerY;
       }
      }

     }
     
     /*
      * 繪制指定區域
      */
     void SimpleDraw(int length) {
      if (length == 0)
       oldX = 0;
      Canvas canvas = sfh.lockCanvas(new Rect(oldX, 0, oldX + length,
        getWindowManager().getDefaultDisplay().getHeight()));// 關鍵:獲取畫布
      Log.i("Canvas:",
        String.valueOf(oldX) + "," + String.valueOf(oldX + length));

      Paint mPaint = new Paint();
      mPaint.setColor(Color.GREEN);// 畫筆為綠色
      mPaint.setStrokeWidth(2);// 設置畫筆粗細

      int y;
      for (int i = oldX + 1; i < length; i++) {// 繪畫正弦波
       y = Y_axis[i - 1];
       canvas.drawLine(oldX, oldY, i, y, mPaint);
       oldX = i;
       oldY = y;
      }
      sfh.unlockCanvasAndPost(canvas);// 解鎖畫布,提交畫好的圖像
     }

     void ClearDraw() {
      Canvas canvas = sfh.lockCanvas(null);
      canvas.drawColor(Color.BLACK);// 清除畫布
      sfh.unlockCanvasAndPost(canvas);

     }
    }

    注意一下 for (int i = oldX + 1; i < length; i++) {// 繪畫正弦波 這句,在.lockCanvas()指定Rect內減少循環畫線的次數,可以提高繪圖效率。

     

    (審核編輯: 智匯小新)

    聲明:除特別說明之外,新聞內容及圖片均來自網絡及各大主流媒體。版權歸原作者所有。如認為內容侵權,請聯系我們刪除。

    国产一区二区精品在线_午夜精品视频_亚洲国产高清高潮精品美女_久久久91_午夜精品视频_久久久久亚洲一区二区三区
    <cite id="gqusq"><tbody id="gqusq"></tbody></cite>
    <strike id="gqusq"><tbody id="gqusq"></tbody></strike>
    <abbr id="gqusq"><rt id="gqusq"></rt></abbr>
  • <strike id="gqusq"><tbody id="gqusq"></tbody></strike>
    <ul id="gqusq"></ul>
    <center id="gqusq"><noscript id="gqusq"></noscript></center>
  • 欧美日韩一区在线视频| 91视频在线免费观看| 国产日韩一区二区三区在线| 亚洲欧美日韩视频二区| 国产精品乱码一区二区三区| 欧美日韩一区二区三| 国产精品xvideos88| 久久高清国产| 日本成人看片网址| 欧美特黄视频| 91免费看网站| 在线观看欧美激情| 国产一区二区久久久| 久久精品欧美| 精品69视频一区二区三区Q| 97视频资源在线观看| 亚洲综合av一区| 国产精品尤物| 五月天丁香综合久久国产| 亚洲高清乱码| 国产伦精品一区二区三区视频黑人| 国产一区二区不卡视频在线观看 | 亚洲欧美激情诱惑| 欧美精品免费观看二区| 亚洲精品在线免费| 另类视频在线观看+1080p| 亚洲视频久久| 欧美1o一11sex性hdhd| 野花国产精品入口| 亚洲国产一区二区三区在线| 欧美资源在线| 国产一区二区三区四区老人| 国产亚洲欧美另类一区二区三区| 亚洲天堂激情| 欧美色欧美亚洲另类七区| 亚洲一区久久| 欧美日韩少妇| 久久人人九九| 97视频热人人精品| 亚洲国产精品一区二区第四页av| 欧美日韩亚洲一区二区三区四区| 午夜亚洲一区| 亚洲高清资源综合久久精品| 日本一区二区高清视频| 久久久噜噜噜| 日韩午夜高潮| 欧美日韩喷水| 亚洲成人一区二区三区| 97伦理在线四区| 99国产精品久久久久久久成人热| 台湾成人av| 麻豆成人小视频| 99久久99久久| 蜜桃伊人久久| 国产精品一区视频| 一区国产精品| 国产精品二区影院| 亚洲午夜激情| 日韩精品久久一区| 久久久影院一区二区三区| 999热视频| 久久最新视频| 久久久水蜜桃| 亚洲欧美日韩精品久久久| 极品裸体白嫩激情啪啪国产精品 | 欧美激情1区| 色播亚洲婷婷| 日韩精品伦理第一区| 麻豆av一区| 美女亚洲精品| 欧美一区激情视频在线观看| 久久福利电影| 欧美精品七区| 欧美国产一二三区| 欧美综合激情| 午夜久久资源| 一区二区免费在线观看| 亚洲bbw性色大片| 亚洲高清乱码| 欧美激情亚洲| 亚洲精品一级| 国产日韩综合| 久久婷婷丁香| 国产高清自拍一区| 精品一区二区三区日本| 欧美性色黄大片人与善| 日本在线观看一区二区三区| 亚洲国产一区二区三区在线播| 日韩理论片在线观看| 亚洲欧美日产图| 欧美久久一区| 亚洲精品精选| 久久一区激情| 精品一区二区三区国产| 日本一区二区三区四区高清视频| 亚洲国产精品久久久久久女王| 在线观看福利一区| 亚洲日本免费| 91一区二区三区| 美女一区视频| 欧美在线播放一区| 国产精品亚洲综合色区韩国| 69堂成人精品视频免费| 久久久福利视频| 你懂的网址国产 欧美| 在线视频精品一区| 产国精品偷在线| 日韩高清国产精品| 影院欧美亚洲| 美女国产一区| 国产一级精品aaaaa看| 日韩精品国内| 一区二区三区导航| 精品国产乱码一区二区三区四区 | 成人欧美一区二区三区在线观看| 欧美日韩一区综合| 91久久黄色| 精品国产乱码久久久久久丨区2区 精品国产乱码久久久久久蜜柚 | 亚洲精品中字| 国产日韩亚洲| 欧美久久电影| 国产精品一区免费观看| 久久久婷婷一区二区三区不卡| 欧美日本一区二区高清播放视频| 久久婷婷av| 欧美精品自拍| 国产aⅴ精品一区二区三区黄| 日韩久久不卡| 免费视频久久| 欧美国产综合视频| 99影视tv| 欧美午夜一区二区福利视频| 成人在线免费网站| 中日韩在线视频| 国产精品香蕉视屏| 激情欧美一区二区三区| 国产视频一区二区三区四区| 欧美日韩精选| 日本不卡一区二区三区视频| 先锋影音久久久| 欧美久久一级| 女人一区二区三区| 国产精品入口| 午夜国产一区| 欧美性天天影院| 久久国产精品一区二区三区| 欧美二区在线| 鲁丝一区鲁丝二区鲁丝三区| 亚洲一区精彩视频| 欧美日韩精品一本二本三本| 免费在线成人av电影| 麻豆av福利av久久av| 国产综合色产| 色婷婷精品国产一区二区三区| 久久狠狠一本精品综合网| 激情综合久久| 一区二区在线不卡| 欧美另类高清视频在线| 久久蜜桃精品| 亚洲一区三区视频在线观看| 欧美三级午夜理伦三级中文幕| 欧美久久电影| 精品在线视频一区二区| 久久综合一区| 性色一区二区| av成人天堂| 亚洲精品一区二区三区蜜桃久| 一区二区免费电影| 日韩欧美一区二区三区四区五区| 国外成人免费视频| 99re6热在线精品视频播放速度| 国产区日韩欧美| 在线视频精品一区| 亚洲激情一区二区| 一区在线免费| 尤物在线精品| 极品日韩av| 亚洲伦理精品| 亚洲精品一区二区三区樱花| 国内精品久久久久久久影视蜜臀| 欧美一区影院| 国产一区视频在线观看免费| 午夜久久美女| 国产精品v一区二区三区| 欧美日韩精品| 最新日韩欧美| 国产视频在线观看一区| 在线亚洲精品| 亚洲影音先锋| 麻豆成人在线| 国产日韩一区二区三区| 精品一区二区日本| 欧美午夜精品理论片a级大开眼界 欧美午夜精品久久久久免费视 | 麻豆精品传媒视频| 91九色在线免费视频| 国产伦精品一区二区三区高清| 精品久久久久久一区二区里番| 国产综合第一页| 天堂√在线观看一区二区| 一区二区三区不卡在线|