当前位置:首页 » 安卓系统 » 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等。

热点内容
济南平安e通如何找回密码 发布:2025-05-19 14:56:58 浏览:175
安卓手机如何找到iccid码 发布:2025-05-19 14:46:51 浏览:226
编译的内核为什么那么大 发布:2025-05-19 14:45:21 浏览:178
什么控制压缩 发布:2025-05-19 14:28:13 浏览:930
网络服务器忙指什么 发布:2025-05-19 14:28:10 浏览:188
服务器有外网ip 发布:2025-05-19 14:02:02 浏览:833
电脑上c语言编程软件 发布:2025-05-19 13:55:17 浏览:125
php56windows 发布:2025-05-19 13:54:23 浏览:717
如何查看攻击过服务器的ip地址 发布:2025-05-19 13:45:44 浏览:942
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:336