當前位置:首頁 » 安卓系統 » android畫圖代碼

android畫圖代碼

發布時間: 2023-05-10 03:05:38

❶ 如何用android顯示實時曲線求方法,代碼

1. 網格背景,心電圖的原理比較簡單,首先繪制一個背景,就是網格就以Windows下的任務管理器來說吧,下面綠色的網格是固定的,如果你比較懶或者考慮繪制效率你甚至可以直接使用一個背景圖片代替,當然代碼繪制效率沒有什麼問題,直接使用Canvas的drawLine方法即可。由兩個for循環控制著橫縱坐標,當然Android123推薦大家使用drawLines參數直接是一個數組。
2. K線圖,對於真正的曲線或者說K線圖,其實就是描點畫圖了,在Android中我們自繪控制項中重寫onDraw方法,onDraw的形參Canvas提供了drawPoint(float x,float y,Point point) 。這三個參數前兩個正好對應橫豎坐標,第三個參數為Point對象,可以控制畫筆的顏色、粗細和類型。如果是動態的,你需要使用一個計時器,最簡單的使用Handler的postDelay方法,使用一個數組動態保存著每個點即可。

❷ android skia與opengl es 都可以畫2d圖嗎

一、基礎知識: OpenGL ES目前只支持三角形,但任何多邊形都可拆分成多個三角形,所以無所謂這個限制的存在。 1.OpenGL中的坐標點: 每一個坐標點由(X, Y, Z)組成。 定義一個三角形的頂點數組: [java] int one = 0x10000; //三角形三個頂點 private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{ 0,one,0, //上頂點 -one,-one,0, //左下點 one,-one,0,}); //右下點 int one = 0x10000; //三角形三個頂點 private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{ 0,one,0, //上頂點 -one,-one,0, //左下點 one,-one,0,}); //右下點定義一個正方形的頂點數組: [java] //正方形的4個頂點 private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{ one,one,0, -one,one,0, one,-one,0, -one,-one,0}); //正方形的4個頂點 private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{ one,one,0, -one,one,0, one,-one,0, -one,-one,0}); 2.OpenGL中的坐標系: 當調用gl.glLoadIdentity()函數之後,實際上是將當前點移動到了屏幕中心, X坐標軸從左至右,Y坐標軸從下至上,Z坐標軸從里至外。 OpenGL屏幕中心的坐標值是X軸和Y軸的0.0f點。 中心左邊的坐標值是負值,右邊是正值; 移向屏幕頂端是正值,移向屏幕底端是負值; 移入屏幕深處是負值,移出屏幕則是正值。 在繪制時,我們可以使用glTranslatef函數來移動畫筆的位置,從而使圖形顯示在我們 想要的位置。 [java] gl.glTranslatef(-1.5f, 0.0f, -6.0f); gl.glTranslatef(-1.5f, 0.0f, -6.0f);此函數,就是將畫筆沿X軸左移1.5f個單位,Y軸保持不變,Z軸向屏幕裡面移動6.0f個單位。 將視圖推入屏幕背後足夠的距離以便可以看見全部的場景,這里需要注意的是屏幕內移動的單位 必須小於我們前面通過glFrustumf方法設置的最遠距離,否則超出視角范圍,將顯示不出來。 3.OpenGL中的頂點數組: 在實際畫圖時,我們往往需要定位幾個點,然後讓OpenGL以此為基準來畫圖。在設置頂點位置前, 我們需要按照以下步驟來啟用我們的頂點數組: ①開啟頂點設置動能: [java] gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);②設置頂點數組: [java] view plainprint?gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer); gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer);glVertexPointer(int size, int type, int stride, Buffer pointer) size用於描述頂點的尺寸(本例使用XYZ,所以是3),type描述頂點的類型,固定的使用 GL_FIXED,stride描述步長,pointer指向頂點緩存,即我們創建的頂點數組。 ③繪制頂點: [java] gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); //繪制三角形 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); //繪制四邊形 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); //繪制三角形 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); //繪制四邊形glDrawArrays(int mode, int first, int count) mode指明繪制的模式,first和count分別是開始的位置和要繪制的頂點計數。 4、實例: 畫一個三角形和正方形。 根據我們上一節的框架分析,目前,我們只需將精力集中在onDrawFrame方法裡面的繪圖操作部分了。 1. 界面編輯(reslayoutmain.xml): [java] android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> 2.代碼編輯 (srcwyfzclMyActivity.java): [java] package wyf.zcl; import android.app.Activity; import android.opengl.GLSurfaceView; import android.opengl.GLSurfaceView.Renderer; import android.os.Bundle; public class Activity01 extends Activity { Renderer render = new GLRender(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GLSurfaceView glView = new GLSurfaceView(this); glView.setRenderer(render); setContentView(glView); } } package wyf.zcl; import android.app.Activity; import android.opengl.GLSurfaceView; import android.opengl.GLSurfaceView.Renderer; import android.os.Bundle; public class Activity01 extends Activity { Renderer render = new GLRender(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GLSurfaceView glView = new GLSurfaceView(this); glView.setRenderer(render); setContentView(glView); } } (srcwyfzclGLRender.java): [java] package wyf.zcl; import java.nio.IntBuffer; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLSurfaceView.Renderer; public class GLRender implements Renderer { int one = 0x10000; //三角形三個頂點 private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{ 0,one,0, //上頂點 -one,-one,0, //左下點 one,-one,0,}); //右下點 //正方形的4個頂點 private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{ one,one,0, -one,one,0, one,-one,0, -one,-one,0}); @Override public void onDrawFrame(GL10 gl) { // 清除屏幕和深度緩存 gl.glClear(GL10.GL_COLOR_BUFFER_BIT GL10.GL_DEPTH_BUFFER_BIT); // 重置當前的模型觀察矩陣 gl.glLoadIdentity(); // 左移 1.5 單位,並移入屏幕 6.0 gl.glTranslatef(-1.5f, 0.0f, -6.0f); // 允許設置頂點 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // 設置三角形 gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer); //繪制三角形 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); // 重置當前的模型觀察矩陣 gl.glLoadIdentity(); // 左移 1.5 單位,並移入屏幕 6.0 gl.glTranslatef(1.5f, 0.0f, -6.0f); //設置和繪制正方形 gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); // 取消頂點設置 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { float ratio = (float) width / height; //設置OpenGL場景的大小 gl.glViewport(0, 0, width, height); //設置投影矩陣 gl.glMatrixMode(GL10.GL_PROJECTION); //重置投影矩陣 gl.glLoadIdentity(); // 設置視口的大小 gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); // 選擇模型觀察矩陣 gl.glMatrixMode(GL10.GL_MODELVIEW); // 重置模型觀察矩陣 gl.glLoadIdentity(); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { // 啟用陰影平滑 gl.glShadeModel(GL10.GL_SMOOTH); // 黑色背景 gl.glClearColor(0, 0, 0, 0); // 設置深度緩存 gl.glClearDepthf(1.0f); // 啟用深度測試 gl.glEnable(GL10.GL_DEPTH_TEST); // 所作深度測試的類型 gl.glDepthFunc(GL10.GL_LEQUAL); // 告訴系統對透視進行修正 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); } } package wyf.zcl; import java.nio.IntBuffer; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLSurfaceView.Renderer; public class GLRender implements Renderer { int one = 0x10000; //三角形三個頂點 private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{ 0,one,0, //上頂點 -one,-one,0, //左下點 one,-one,0,}); //右下點 //正方形的4個頂點 private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{ one,one,0, -one,one,0, one,-one,0, -one,-one,0}); @Override public void onDrawFrame(GL10 gl) { // 清除屏幕和深度緩存 gl.glClear(GL10.GL_COLOR_BUFFER_BIT GL10.GL_DEPTH_BUFFER_BIT); // 重置當前的模型觀察矩陣 gl.glLoadIdentity(); // 左移 1.5 單位,並移入屏幕 6.0 gl.glTranslatef(-1.5f, 0.0f, -6.0f); // 允許設置頂點 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // 設置三角形 gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer); //繪制三角形 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); // 重置當前的模型觀察矩陣 gl.glLoadIdentity(); // 左移 1.5 單位,並移入屏幕 6.0 gl.glTranslatef(1.5f, 0.0f, -6.0f); //設置和繪制正方形 gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); // 取消頂點設置 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { float ratio = (float) width / height; //設置OpenGL場景的大小 gl.glViewport(0, 0, width, height); //設置投影矩陣 gl.glMatrixMode(GL10.GL_PROJECTION); //重置投影矩陣 gl.glLoadIdentity(); // 設置視口的大小 gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); // 選擇模型觀察矩陣 gl.glMatrixMode(GL10.GL_MODELVIEW); // 重置模型觀察矩陣 gl.glLoadIdentity(); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { // 啟用陰影平滑 gl.glShadeModel(GL10.GL_SMOOTH); // 黑色背景 gl.glClearColor(0, 0, 0, 0); // 設置深度緩存 gl.glClearDepthf(1.0f); // 啟用深度測試 gl.glEnable(GL10.GL_DEPTH_TEST); // 所作深度測試的類型 gl.glDepthFunc(GL10.GL_LEQUAL); // 告訴系統對透視進行修正 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); } } 3.運行效果:

❸ android用Canvas.drawBitmap畫圖片,沒有顯示

沒有代碼嗎

❹ android 怎麼畫一個圓弧的正方形

先來介紹一下畫幾何圖形要用到的,畫布(Canvas)、畫筆(Paint)。 1. 畫一個圓使用的是drawCircle:canvas.drawCircle(cx, cy, radius, paint);x、y代表坐標、radius是半徑、paint是畫筆,就是畫圖的顏色; 2. 在畫圖的時候還要有注意,你所畫的矩。可以看看安卓巴士的教程:http://www.apkbus.com/thread-465690-1-1.html

❺ android如何在屏幕點擊位置畫一個小圓

主要運用SurfaceView來實現在屏幕上畫一個圓,你可以通過按方向鍵和觸摸屏幕來改變圓的位置

代碼:
Activity

package com.view;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// 隱藏狀態欄
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

// 把Activity的標題去掉
requestWindowFeature(Window.FEATURE_NO_TITLE);

// 設置布局
this.setContentView(new MySurfaceView(this));
}
}

SurfaceView

package com.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

public class MySurfaceView extends SurfaceView implements Runnable, Callback {

private SurfaceHolder mHolder; // 用於控制SurfaceView

private Thread t; // 聲明一條線程

private boolean flag; // 線程運行的標識,用於控制線程

private Canvas mCanvas; // 聲明一張畫布

private Paint p; // 聲明一支畫筆

private int x = 50, y = 50, r = 10; // 圓的坐標和半徑

public MySurfaceView(Context context) {
super(context);

mHolder = getHolder(); // 獲得SurfaceHolder對象
mHolder.addCallback(this); // 為SurfaceView添加狀態監聽
p = new Paint(); // 創建一個畫筆對象
p.setColor(Color.WHITE); // 設置畫筆的顏色為白色
setFocusable(true); // 設置焦點
}

/**
* 自定義一個方法,在畫布上畫一個圓
*/
public void Draw() {
mCanvas = mHolder.lockCanvas(); // 獲得畫布對象,開始對畫布畫畫
mCanvas.drawRGB(0, 0, 0); // 把畫布填充為黑色
mCanvas.drawCircle(x, y, r, p); // 畫一個圓
mHolder.unlockCanvasAndPost(mCanvas); // 完成畫畫,把畫布顯示在屏幕上
}

/**
* 當SurfaceView創建的時候,調用此函數
*/
@Override
public void surfaceCreated(SurfaceHolder holder) {
t = new Thread(this); // 創建一個線程對象
flag = true; // 把線程運行的標識設置成true
t.start(); // 啟動線程
}

/**
* 當SurfaceView的視圖發生改變的時候,調用此函數
*/
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}

/**
* 當SurfaceView銷毀的時候,調用此函數
*/
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
flag = false; // 把線程運行的標識設置成false
}

/**
* 當屏幕被觸摸時調用
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
x = (int) event.getX(); // 獲得屏幕被觸摸時對應的X軸坐標
y = (int) event.getY(); // 獲得屏幕被觸摸時對應的Y軸坐標
return true;
}

/**
* 當用戶按鍵時調用
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_DPAD_UP){ //當用戶點擊↑鍵時
y--; //設置Y軸坐標減1
}
return super.onKeyDown(keyCode, event);
}

@Override
public void run() {
while (flag) {
Draw(); // 調用自定義畫畫方法
try {
Thread.sleep(50); // 讓線程休息50毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

}

MySurfaceView首先繼承SurfaceView,然後實現Runnable和Callback介面

重寫了Runnable的run方法和Callback的surfaceCreated(SurfaceHolder holder),surfaceChanged(SurfaceHolder holder, int format, int width,int height),surfaceDestroyed(SurfaceHolder holder)方法,
還實現了onTouchEvent(MotionEvent event),onKeyDown(int keyCode, KeyEvent event)方法來,詳細的在代碼里已注釋。

❻ android用Xfermode畫圖時Mode.DST_IN無效

Mode.DST_IN:表散隱示 用DST畫筆,在沖慶廳DST區域范圍內,繪制SRC與DST相交部分圖形。

DST畫筆:即為繪制rawBitmap畫筆;
DST區域范圍:即為rawBitmap(也是localBitmap)區域。
SRC與DST相交部分:完全相交於rawBitmap內,所以畫出來的依然還是rawBitmap本身。

您的意圖是想差核只顯示SRC與DST相交部分,且是用rawBitmap的畫筆畫出局部的rawBitmap圖像。
正確的做法是:
先畫drawCircle,然後paint.setXfermode:SRC_IN,然後畫drawBitmap。

❼ android已知兩點坐標怎麼畫直線

在android的體系中,畫圖用的是Canvas和Paint來實現的,你可以調用裡面的方法來畫任何你想要的圖形。

❽ android,View不能自己寫一個myPaint方法在子線程中畫圖嗎

不粗基老可以,onDraw是父類方法,系統自動回調,一般是在view刷新的時候調用。你鋒橡可以把你的onPaint方法放岩升到onDraw方法裡面調用,在別的地方調用validate方法(也可以是別的刷新view的方法),不過這樣就沒意義了。而且增加代碼的冗餘。也就是說畫圖是通過onDraw方法來顯示的,onDraw只有一個參數Canvas就是畫布的意思,畫布當然就是把圖像顯示這塊畫布上的意思。serfaceview也是繼承view,所以跟getHolder沒關系。

❾ android開發問題: 在Activity主界面繪制畫布,可是它把整個窗口都覆蓋掉了,怎麼設定畫布的窗口大小呢(

你是說View占滿了整個屏幕嗎?這樣的話就只能在layout中寫一個布局文件,將View以一種組件的方式聲明到.xml文件中,然後你可以在它的上下中聲明其他的button或者textview或者ImageButton等。

熱點內容
安卓怎麼錄屏只錄一點 發布:2025-05-19 17:12:39 瀏覽:521
甘肅移動服務密碼在哪裡 發布:2025-05-19 17:11:15 瀏覽:541
java內部類訪問外部類方法 發布:2025-05-19 17:10:30 瀏覽:286
用解壓造句 發布:2025-05-19 17:01:55 瀏覽:341
openwrt編譯取消跑碼 發布:2025-05-19 16:50:28 瀏覽:125
知道了寬頻賬號密碼如何連接 發布:2025-05-19 16:49:49 瀏覽:656
時間輪資料庫 發布:2025-05-19 16:45:20 瀏覽:269
ipad緩存垃圾怎麼清理 發布:2025-05-19 16:44:46 瀏覽:536
視頻加解壓 發布:2025-05-19 16:35:28 瀏覽:7
c語言大學教程第六版 發布:2025-05-19 16:04:21 瀏覽:741