这次着重的还是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() {
@Override
public 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);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 获取锅炉压力 ,根据压力显示不同的内容
timer = new Timer();
task = new TimerTask() {
@Override
public 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 代表的是屏幕的画布
@Override
protected 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();
}