亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android提高之SurfaceView的基本用法實例分析

2020-04-11 11:46:20
字體:
來源:轉載
供稿:網友

前文介紹了Android中MediaPlayer用法的時候稍微介紹了SurfaceView,SurfaceView由于可以直接從內存或者DMA等硬件接口取得圖像數據,因此是個非常重要的繪圖容器,這次我就來較為詳細的介紹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的源碼如下:

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

接下來貼出Java程序源碼如下:

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內減少循環畫線的次數,可以提高繪圖效率。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美专区在线观看| 日韩电影大全免费观看2023年上| 国产精品高潮呻吟久久av黑人| 欧美成人午夜剧场免费观看| 7m第一福利500精品视频| 国产日韩欧美日韩| 欧美午夜精品久久久久久人妖| 国产精品免费视频久久久| 亚洲第一区第二区| 亚洲第一精品电影| 中文字幕综合在线| 国产精品第一第二| 欧美激情亚洲一区| 2019中文字幕在线| 97久久伊人激情网| 国产欧美日韩精品丝袜高跟鞋| 国产97色在线| 一区二区亚洲精品国产| 不卡av在线播放| 美女视频久久黄| 日韩av免费观影| 国产成人福利夜色影视| 97在线精品视频| 色老头一区二区三区| 日韩欧美在线观看| 久久成人精品一区二区三区| 亚洲欧美精品伊人久久| 亚洲午夜av电影| 亚洲欧洲日产国码av系列天堂| 91精品国产91久久| 久久影院资源网| 国产亚洲精品成人av久久ww| 亚洲精选中文字幕| 91tv亚洲精品香蕉国产一区7ujn| 欧美最近摘花xxxx摘花| 国产免费一区二区三区在线能观看| 欧美日韩性生活视频| 久热爱精品视频线路一| 日韩电影中文字幕av| 国产丝袜精品第一页| 日韩hd视频在线观看| 亚洲欧美日韩在线高清直播| 久久久久久国产精品久久| 亚洲成人黄色网| 国产精品高清在线观看| 欲色天天网综合久久| 韩剧1988在线观看免费完整版| 精品国产一区二区三区久久| 日韩亚洲欧美中文在线| 欧美激情一区二区三区久久久| 91在线免费观看网站| 岛国精品视频在线播放| 中日韩美女免费视频网站在线观看| 亚洲第一区第一页| 永久555www成人免费| 欧美日本高清一区| 视频直播国产精品| 欧美性生交大片免费| 久久久精品亚洲| 欧美午夜视频在线观看| 亚洲精品在线视频| 国产精品美女久久久久久免费| 成人av资源在线播放| 九九热精品视频| 国产一区二区三区中文| 日韩中文字幕国产| 日韩在线视频网站| 亚洲自拍小视频免费观看| 国产精品中文字幕在线观看| 亚洲偷熟乱区亚洲香蕉av| 精品久久久久久久久久久久久| 日韩中文字幕久久| 青青草成人在线| 欧美www在线| 国产在线日韩在线| 在线看日韩欧美| 国产精品久久久久77777| 91在线观看欧美日韩| 久久综合五月天| 4k岛国日韩精品**专区| 日韩激情av在线播放| 国产97色在线|日韩| 日韩av在线网站| 国外色69视频在线观看| 国产成人欧美在线观看| 日韩在线观看免费全| 国产婷婷成人久久av免费高清| 亚洲电影第1页| 91久久久精品| 国产精品永久免费在线| 欧美一级大胆视频| 亚洲一区亚洲二区亚洲三区| 欧美在线视频一区| 永久免费毛片在线播放不卡| 精品中文字幕在线2019| 欧美老少做受xxxx高潮| 亚洲护士老师的毛茸茸最新章节| 91久久精品国产91久久性色| 97国产精品视频| 国产婷婷97碰碰久久人人蜜臀| 欧美中文在线视频| 粉嫩老牛aⅴ一区二区三区| 欧美影院成年免费版| 26uuu另类亚洲欧美日本一| 久久久av亚洲男天堂| 国产精品美女免费| 亚洲理论片在线观看| 91精品国产综合久久香蕉最新版| 国内精品一区二区三区| 久久久999精品视频| 欧美激情第三页| 欧美大荫蒂xxx| 韩国v欧美v日本v亚洲| 成人av资源在线播放| 亚洲人成网站777色婷婷| 国产成人亚洲综合91精品| 啊v视频在线一区二区三区| 精品日韩视频在线观看| 亚洲性生活视频在线观看| 色偷偷偷亚洲综合网另类| 日韩中文字幕在线播放| 97超碰国产精品女人人人爽| 国产精品日韩在线| 欧美日韩高清区| 久久国产精品免费视频| 在线电影欧美日韩一区二区私密| 国产亚洲精品成人av久久ww| 国产精品入口日韩视频大尺度| 九九热在线精品视频| 亚洲aa中文字幕| 久久久久久国产精品三级玉女聊斋| 2019亚洲男人天堂| 日韩一区二区三区国产| 精品日本高清在线播放| 国产精品电影一区| 色播久久人人爽人人爽人人片视av| 亚洲一区亚洲二区亚洲三区| 久久天天躁狠狠躁夜夜av| 国产精品久久久久久久久久三级| 97欧美精品一区二区三区| 欧美日韩精品在线观看| 国产一区二区三区在线观看网站| 欧美裸体男粗大视频在线观看| 日韩av123| 中文字幕亚洲欧美日韩在线不卡| 国产日韩欧美综合| y97精品国产97久久久久久| 午夜精品在线视频| 欧美在线免费观看| 国产精品国产自产拍高清av水多| 日韩69视频在线观看| 这里只有精品在线播放| 色噜噜国产精品视频一区二区| 欧美插天视频在线播放| 国产综合在线看| 45www国产精品网站| 欧美激情视频在线| 国产成人综合一区二区三区| 91精品久久久久久综合乱菊| 国产v综合ⅴ日韩v欧美大片| 国产精品福利在线观看网址| 一本色道久久88精品综合| 亚洲欧美国产视频| 午夜精品久久久久久久久久久久|