NDK学习 锅炉监控器

这次着重的还是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();

}


posted @ 2012-11-14 19:38  sfshine  阅读(139)  评论(0编辑  收藏  举报