android113 自定义进度条

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;

/*界面:
<com.itheima.monitor.MyProgressBar
android:id="@+id/pb"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
/>*/

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 <jni.h>
#include <stdio.h>
#include <stdlib.h>

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的所有方法的签名。
时间: 2024-10-02 07:29:31

android113 自定义进度条的相关文章

自定义进度条(圆形、横向进度条)

自定义进度条实现大体流程 1.自定义属性声明(attrs文件) 2.自定义属性获取 3.测量(onMeasure) 4.绘制(onDraw) 代码: attrs文件: <!-- 自定义声明 --> <attr name="progress_unreach_color" format="color"></attr> <attr name="progress_unreach_height" format=&q

Android自定义进度条样式

最近在做一个widget,上面需要一个progressbar,产品经理和设计师给出来的东西是要实现一个圆角的progress和自定义的颜色,研究一小下,分享出来给大家哦. 测试于:Android4.0+ 操作步骤: 1.创建你的layout文件引用progressbar如下,标红处引用你自定的样式: <ProgressBar android:id="@+id/progressDownload" style="?android:attr/progressBarStyleH

Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)

/** * 带文本提示的进度条 */ public class TextProgressBar extends ProgressBar { private String text; private Paint mPaint; public TextProgressBar(Context context) { super(context); initText(); } public TextProgressBar(Context context, AttributeSet attrs, int d

自定义进度条\文字描边样式\文字上下滚动TextSwithcher的应用

一.自定义进度条 1.<ProgressBar         android:id="@+id/patch_progress"         style="@style/gxProgressStyle"         android:layout_width="match_parent"         android:layout_height="12dp"         android:layout_alig

自定义进度条PictureProgressBar——从开发到开源发布全过程

自定义进度条PictureProgressBar--从开发到开源发布全过程 出处: 炎之铠邮箱:[email protected] 本文原创,转载请注明本出处! 本项目JCenter地址:https://bintray.com/yanzhikaijky/CustomViewRepository/PictureProgressbar/ 本项目GitHub地址:https://github.com/totond/PictureProgressBar 欢迎 Star or Fork和在Issue里提出

android 自定义进度条颜色

先看图 基于产品经理各种自定义需求,经过查阅了解,下面是自己对Android自定义进度条的学习过程!   这个没法了只能看源码了,还好下载了源码, sources\base\core\res\res\  下应有尽有,修改进度条颜色只能找progress ,因为是改变样式,首先找styles.xml 找到xml后,进去找到 [html] view plaincopyprint? <span style="font-size: 18px;">    <style name

Android 自定义进度条,

最近工作繁忙,一直都埋头在工作中,也不知这么热心工作究竟是为了什么,不知不觉的,到今天才晓得夏天已经来了.天气热,心也热. 网络上出个牛人,辞职信上写着:世界那么大,我想去看看.由衷的佩服她的勇气,我也想去看看这大千世界,可惜我们总是身不由己,有太多的放不下,或许哪天放下了,我也出去走走. 之前一直以为罗永浩是个逗比,直到前两天看了他几期演讲,才发现逗比一直是我.他有句话我很欣赏,这里也分享给大家:在什么样的年纪,就做什么样的事情,怎么能在每个阶段都做错呢!PS:该玩的年纪玩,该谈恋爱的年纪谈恋

iOS自定义进度条高度(UIProgressView进度条高度改变的实现)

今天自定义了iOS中的进度条,发现系统的进度条高度无法改变, 现在自己封装了一种进度条(实际是是UIView而不是UIProgressView),可以改变进度条的高度,非常好用,分享给大家,直接上代码: //  CTWBProgress.h //  Created by WBapple on 16/7/31. //  Copyright © 2016年 王彬. All rights reserved. // #import <UIKit/UIKit.h> @interface CTWBProg

最简单的android自定义进度条样式

一.自定义圆形进度条样式 1.在安卓项目drawable目录下新建一个xml文件如下:<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:pivotX="50%" android:pivotY="50%" andro