NDK学习 锅炉监控器

来源:互联网 发布:淘宝手机触屏版 编辑:程序博客网 时间:2024/04/25 08:55

这次着重的还是java的界面显示

可以作爲一個ndk開發的模板

package cn.itcast.monitor;import java.util.Timer;import java.util.TimerTask;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.widget.TextView;public class DemoActivity extends Activity {public native int getPressure();private Timer timer;private TimerTask task;private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {int pressure = (Integer) msg.obj;int color = getColor(pressure);if (color == 404) {TextView tv = new TextView(DemoActivity.this);tv.setTextColor(Color.RED);tv.setTextSize(30);tv.setText("锅炉快要爆炸了 快跑吧!");// todo 播放报警声音setContentView(tv);timer.cancel();return;}MyView myview = new MyView(DemoActivity.this, pressure, color);setContentView(myview);super.handleMessage(msg);}};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 获取锅炉压力 ,根据压力显示不同的内容timer = new Timer();task = new TimerTask() {@Overridepublic void run() {int pressure = getPressure() % 300;System.out.println("压力" + pressure);// 把压力显示到ui界面上Message msg = new Message();msg.obj = pressure;handler.sendMessage(msg);}};timer.schedule(task, 1000, 2000);//在一秒之后启动每隔2秒启动一次}/** * 根据锅炉压力 获取应该显示的颜色 *  * @param pressure * @return */public int getColor(int pressure) {if (pressure < 100) {return Color.GREEN;} else if (pressure < 200) {return Color.YELLOW;} else if (pressure < 260) {return Color.RED;} else {return 404;}}static {System.loadLibrary("Hello");}}

package cn.itcast.monitor;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.View;public class MyView extends View {private int bottom;private Paint paint ;public MyView(Context context,int bottom, int color) {super(context);this.bottom = bottom;paint = new Paint();paint.setColor(color);paint.setStrokeWidth(10);}//所有android下的view控件的显示 其实是通过 ondraw// canvas 代表的是屏幕的画布@Overrideprotected void onDraw(Canvas canvas) {//Paint paint = new Paint();//paint.setColor(Color.RED);//paint.setStrokeWidth(10);//paint.setTextSize(20);////canvas.drawText("哥是被画出来的", 20, 20, paint);//bottom值 需要根据锅炉的压力 动态确定 canvas.drawRect(20, 20, 30, bottom, paint);super.onDraw(canvas);}}

#include<stdio.h>#include<jni.h>#include<stdlib.h>#include"cn_itcast_monitor_DemoActivity.h"int getpressure() {// c语言中的随机数return rand();}JNIEXPORT jint JNICALL Java_cn_itcast_monitor_DemoActivity_getPressure(JNIEnv * env, jobject obj) {return getpressure();}


原创粉丝点击