1. 程式人生 > >surfaceview-自定義畫圖或顯示圖片

surfaceview-自定義畫圖或顯示圖片

package com.example.mysurfaceview;


import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;


import java.io.InputStream;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.TimerTask;


import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
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 MainActivity extends Activity {
/** Called when the activity is first created. */
Button btnSimpleDraw, btnTimerDraw;
SurfaceView svSurfaceView;
SurfaceHolder shSurfaceHolder;


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


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


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


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


// 初始化y軸資料
centerY = (getWindowManager().getDefaultDisplay().getHeight() - svSurfaceView.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 = new Timer();
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 = shSurfaceHolder.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);// 設定畫筆粗細

/* // 獲取當前時間
Date curDate = new Date(System.currentTimeMillis());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss sss");
String sNow = sdf.format(curDate);

canvas.drawText("時間 "+sNow, 100, 100, mPaint);*/


/*
* InputStream is =
* getResources().openRawResource(R.drawable.ic_launcher);
* 
* Bitmap mBitmap = BitmapFactory.decodeStream(is);
* 
* canvas.drawBitmap(mBitmap, 0, 0, null);
*/


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;


InputStream is = getResources().openRawResource(R.drawable.ic_launcher);


Bitmap mBitmap = BitmapFactory.decodeStream(is);


canvas.drawBitmap(mBitmap, 0, 0, null);

// 獲取當前時間
Date curDate = new Date(System.currentTimeMillis());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss sss");
String sNow = sdf.format(curDate);

canvas.drawText("time "+sNow, 100, 100, mPaint);
}
shSurfaceHolder.unlockCanvasAndPost(canvas);// 解鎖畫布,提交畫好的影象
}


/**
* 清除畫圖內容
*/
void ClearDraw() {
Canvas canvas = shSurfaceHolder.lockCanvas(null);
canvas.drawColor(Color.BLACK);// 清除畫布
shSurfaceHolder.unlockCanvasAndPost(canvas);


}
}

相關推薦

surfaceview-定義畫圖顯示圖片

package com.example.mysurfaceview; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import java.io.In

導航欄使用UIButton定義返回按鈕的圖片

idl smi uic uiimage clas ini anim literal 使用 - (void)viewDidLoad { UIButton *backItem = [UIButton buttonWithType:UIButtonTypeCustom];

定義高度寬度縮小圖片

path java clas thumbnail getparent pos 比例 縮放 subst 直接上代碼: package com.henu.test; import java.awt.Graphics; import java.awt.image.Buffer

定義View不顯示的問題

idt 不能 pre 寫法 是否為空 錯誤提示 recycler tac fresh 問題描述: 我自定義了一個把 SwipeRefreshLayout 和 RecyclerView 封裝在一起的 View ,但是發現 List 不能正常的顯示出來,本以為是

java sql編輯器 動態報表 數據庫備份還原 quartz定時任務調度 定義表單 java圖片爬蟲

springmvcmybatis整合 bootstrap 框架源碼 spring html5 官網 http://www.fhadmin.org/A代碼編輯器,在線模版編輯,仿開發工具編輯器,pdf在線預覽,文件轉換編碼B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,快速開

java sql 編輯器 數據庫備份還原 quartz 定時任務調度 定義表單 java 圖片爬蟲 集成代碼生成器

分離 文件大小 發送郵件 進度條 服務器配置 mysql http 備份數據庫 生成報表 A代碼編輯器,在線模版編輯,仿開發工具編輯器,pdf在線預覽,文件轉換編碼B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,快速開發利器)+快速表單構建器 freemake

Asp.Net Core 通過定義中間件防止圖片盜鏈的實例(轉)

訪問 沒有 static padding task start leg 自我 header 一、原理 要實現防盜鏈,我們就必須先理解盜鏈的實現原理,提到防盜鏈的實現原理就不得不從HTTP協議說起,在HTTP協議中,有一個表頭字段叫referer,采用URL的格式來表示從哪兒

資料遷移之excel修改時間字串為定義格式時間戳

原資料:Wed Aug 01 04:41:37 CST 2018 excel公式:=DATE(MID(F2,25,4),MONTH(MID(F2,5,3)&1),MID(F2,9,2))+TIME(MID(F2,12,2),MID(F2,15,2),MID(F2,18,2)) //M

百度地圖API 定義座標點及圖片

var map = new BMap.Map("allmap");var point = new BMap.Point(105.955754,36.525109);map.centerAndZoom(point,8);map.en

django定義admin表頭顯示

預設情況下,Django 顯示每個物件的 str() 返回的值。 如果想顯示多個值,並且按照一定順序則需要 from django.contrib import admin from .models import BlogType, Blog @admin.regi

Android定義ScrollView下拉圖片變大且帶有一鍵置頂功能

描述:下拉ScrollView時頂部的圖片隨之變大,回拉縮小,且帶有一鍵置頂的功能   1.自定義類: import android.animation.ObjectAnimator; import android.animation.ValueAnimator; imp

ListView與定義介面卡(顯示java端的資料)

一、自定義介面卡 1、BaseAdapter:是所有介面卡類的父類,可以對列表項進行最大限度的定製 2、自定義介面卡中的方法 @Override public int getCount() {//從java端獲取到多少條資料 return da

定義View---隨機顯示TextView並更換背景顏色

1.自定義View @SuppressLint("AppCompatCustomView") public class Random extends TextView{ public Random(Context context) { super(context)

定義結構類作為訊號和槽的引數

        在QT中如何用自定義結構作為訊號和槽的引數,在網上查了一通,用人說要用qRegisterMetaType註冊結構,還有說要為結構使用巨集Q_DECLARE_METATYPE。不知道是不是他們的版本太舊。經本人驗證,既無需註冊,也無需使用巨集,就可使用結構或類作

判斷今天屬於這月的第幾周,並展示這一週的日期(含定義日期拼接顯示

這個可以用於簽到打卡 本週資訊的展示 思路很簡單: 首先獲取這個月的1號是星期幾,如果就是星期一就很簡單這就是第一週的第一天然後向後面推算就可以計算出剩下的資訊 如果是星期二需要向上一個月推算一天,就必須獲取這個月分知道上一個月有多少天,如果這個月是一月上一個月就是1

Python定義地合併拼接圖片

筆者在工作的時候,往往視覺化很多演算法結果,但是做分析的時候就有點頭疼,超級多圖,可能要兩兩比較或者几几比較,一張張翻圖並不是最優的方式。根據所需拼接圖片,然後再分析是一個很高效的事兒。於是基於Pyth

定義View——聊天頁圖片展示

我儘量不打錯別字,用詞準確,不造成閱讀障礙。 本文是自定義聊天時的圖片和視訊顯示及傳送控制元件。 效果: 程式碼: 自定義屬性 <declare-styleable name="MyIMImageView"> <att

【七牛雲】1.如何從測試域名過渡到定義域名--七牛圖片載入不了

問題:最近碰到網站上使用七牛雲端儲存的圖片載入不了,原因是七牛雲上的加速域名是使用測試域名的(要回收的!),測試域名一回收很多之前的專案都要改。。。(在此記錄一下) 解決:可以參考測試域名的使用規範:https://developer.qiniu.com/fusion/kb

定義ViewGroup-定義LayoutParams支援顯示方位

自定義屬性: <resources> <declare-styleable name="CustomViewGroup5"> <attr name="layout_position" format="enum">

R語言——在linux環境下如何畫圖儲存圖片

通常在win環境下,我們利用RStudio畫圖非常方便,直接plot就可以展現出圖片,但是在linux環境下,我們通過shell則無法畫圖。 問題 例如我們在linux下的R中輸入如下命令: png('test.png') 則會出現如下錯誤資訊: Error in .