博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android113 自定义进度条
阅读量:6183 次
发布时间:2019-06-21

本文共 3385 字,大约阅读时间需要 11 分钟。

MainActivity:

package com.itheima.monitor;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.widget.ProgressBar;public class MainActivity extends Activity {    private MyProgressBar pb;    static{        System.loadLibrary("hello");    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        pb = (MyProgressBar) findViewById(R.id.pb);//自定义进度条        pb.setMax(100);    }   public void start(View v){       new Thread(){           public void run() {               startMonitor();           };       }.start();   }   public void stop(View v){       stopMonitor();   }       public native void startMonitor();   public native void stopMonitor();      public void show(int pressure){       pb.setPressure(pressure);   }}

MyProgressBar。java

package com.itheima.monitor;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.view.View;/*界面:
*/public class MyProgressBar extends View { private int pressure; private int max; public MyProgressBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MyProgressBar(Context context, AttributeSet attrs) { super(context, attrs); } public MyProgressBar(Context context) { super(context); } public void setPressure(int pressure) { this.pressure = pressure; //使当前组件MyProgressBar视图无效,如果当前视图是可见的,那么onDraw会调用,只能在主线程使用// invalidate(); 主线程调用这个方法 postInvalidate();//子线城用这个方法,这样进度条才会一直绘制进度条。 } public void setMax(int max) { this.max = max; } //在自定义组件绘制内容 @Override protected void onDraw(Canvas canvas) { //任何组件在显示在页面上的时候onDraw方法都会调用一次, Paint paint = new Paint();//画笔 if(pressure < 50){ paint.setColor(Color.GREEN); } else if(pressure < 80){ paint.setColor(0xffff8800); } else { paint.setColor(Color.RED); } canvas.drawRect(10, 10 + max - pressure, 30, 10 + max, paint);//画矩形,也就是画进度条。 canvas.drawText("dddd", 10, 10, paint);//写文字 }}

hello.c

#include 
#include
#include
int getPressure(){ //……监测电压……运算得到压力值 return rand() % 101;}int monitor;JNIEXPORT void JNICALL Java_com_itheima_monitor_MainActivity_startMonitor (JNIEnv * env, jobject obj){
//obj是MainActivity, monitor = 1; while(monitor){ //获取锅炉压力 int pressure = getPressure();//C中通过反射调用java的方法 //jclass (*FindClass)(JNIEnv*, const char*); jclass clazz = (*env)->FindClass(env, "com/itheima/monitor/MainActivity"); //jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*); jmethodID methodId = (*env)->GetMethodID(env, clazz, "show", "(I)V");//(I)V是方法的签名,返回值是void参数是int //void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...); (*env)->CallVoidMethod(env, obj, methodId, pressure);//调用java的show方法 sleep(1); }}JNIEXPORT void JNICALL Java_com_itheima_monitor_MainActivity_stopMonitor (JNIEnv * env, jobject obj){ monitor = 0;}//进入工程的bin\classes目录,执行javap -s Mainactivity的全包名类名,就可以查看MainActivity的所有方法的签名。

 

转载地址:http://vfsda.baihongyu.com/

你可能感兴趣的文章
前端处理后端接口传递过来的图片文件
查看>>
react中的可控组件与非可控组件
查看>>
Android基础—四大组件之Activity
查看>>
Nginx 学习笔记
查看>>
你为什么选择程序员这个职业?
查看>>
[译] 用于 iOS 的 ML Kit 教程:识别图像中的文字
查看>>
有关https的SSL加密方式
查看>>
ES6的开发环境搭建
查看>>
iOS JSON、XML解析技巧
查看>>
linux 系统无法启动的基本解决方法
查看>>
【评分】第四次作业--项目选题报告(团队)
查看>>
重复枚举和不重复枚举
查看>>
ES正常停止步骤
查看>>
通配符的匹配很全面, 但无法找到元素 'context:component-scan' 的声明。
查看>>
Kafka的CommitFailedException异常
查看>>
思考与阅读
查看>>
ES6
查看>>
Wireshark中的一些SNMP相关的过滤器
查看>>
java8 新特性
查看>>
Xilinx Vivado的使用详细介绍(1):创建工程、编写代码、行为仿真、Testbench
查看>>