rAndroid(11):进度条ProgressBar/SeekBar/RatingBar

  1. Android中的进度条:
    这里写图片描述
  2. 第一排的是ProgressBar,他们风格不同而已,第二排的三和四是ProgressBar的子类
    这里写图片描述
  3. 在xml文件中设置ProgressBar的属性
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
<ProgressBar 
    android:id="@+id/progressBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:max="200"
    android:progress="100"
    android:secondaryProgress="150"
    style="?android:attr/progressBarStyleHorizontal"
    />
<Button
    android:id="@+id/firstProgress_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="增加第一进度">
</Button>
<Button
    android:id="@+id/secondProgress_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="增加第二进度">
</Button>
</LinearLayout>
  1. 在代码中设置ProgressBar的属性
package com.borqs.firstpj;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.ProgressBar;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;

public class MainActivity extends ActionBarActivity {
    ProgressBar mProgressBar;
    Button mFirstProgress;
    Button mSecondProgress;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mProgressBar = (ProgressBar)findViewById(R.id.progressBar);
        mFirstProgress = (Button)findViewById(R.id.firstProgress_btn);
        mSecondProgress = (Button)findViewById(R.id.secondProgress_btn);
        //设置进度条的最大值
//      mProgressBar.setMax(300);
        //设置进度条的当前进度
        mProgressBar.setProgress(100);
        //设置进度条的第二进度值
        mProgressBar.setSecondaryProgress(150);

        //是否是明确的方法,如果ProgressBar是明确的返回false,如果ProgressBar是不明确的返回ture
        boolean flag = mProgressBar.isIndeterminate();

        ProgressButtonListener listener = new ProgressButtonListener();
        mFirstProgress.setOnClickListener(listener);

        SecondProgressButtonListener l = new SecondProgressButtonListener();
        mSecondProgress.setOnClickListener(l);
    }

    class ProgressButtonListener implements OnClickListener{
        @Override
        public void onClick(View v) {
            mProgressBar.incrementProgressBy(10);
        }
    }

    class SecondProgressButtonListener implements OnClickListener{
        @Override
        public void onClick(View v) {
            mProgressBar.incrementSecondaryProgressBy(20);
        }
    }
}

这里写图片描述


SeekBar

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation= "horizontal">
    <SeekBar 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/seekBar"/>
</LinearLayout>
public class MainActivity extends ActionBarActivity {
    private SeekBar mSeekBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mSeekBar = (SeekBar)findViewById(R.id.seekBar);
        mSeekBar.setProgress(10);
        mSeekBar.setSecondaryProgress(50);
        onChangeListener listener = new onChangeListener();
        mSeekBar.setOnSeekBarChangeListener(listener);
    }
    class onChangeListener implements OnSeekBarChangeListener{
        /**
         * seekBar:指的是触发了监听器的Seekbar对象
         * progress:当前进度
         * fromUser:这次的变化是不是有用户引起的,如果是用户拖拽导致的SeekBar的变化是true
         */
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            System.out.println("seekBar:" + seekBar + ",progress:" + progress + ",fromUser:" + fromUser);
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            System.out.println("start");
        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            System.out.println("stop");
        }
    }

RatingBar

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation= "horizontal">
    <RatingBar 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/ratingBar"/>
    <Button
        android:id="@+id/btn"
        android:text="button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

    private RatingBar mRatingBar;
    private Button mButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRatingBar = (RatingBar)findViewById(R.id.ratingBar);
        mButton = (Button)findViewById(R.id.btn);
        //总共5颗星
        mRatingBar.setNumStars(5);
        //一次前进一颗星
        mRatingBar.setStepSize(1);
        //监听步进变化
        RatingBarChangedListener listener = new RatingBarChangedListener();
        mRatingBar.setOnRatingBarChangeListener(listener);

        //测试button改变ratingbar步进值,fromUser为false.
        buttonClickChangedListener l = new buttonClickChangedListener();
        mButton.setOnClickListener(l);
    }
    class RatingBarChangedListener implements OnRatingBarChangeListener{
        @Override
        public void onRatingChanged(RatingBar ratingBar, float rating,
                boolean fromUser) {
            System.out.println("rating:" + rating + ",fromUser:" + fromUser);
        }
    }
    class buttonClickChangedListener implements OnClickListener{
        @Override
        public void onClick(View v) {
            mRatingBar.setRating(mRatingBar.getRating() + 2.0f);
        }
    }

结果:当使用button改变ratingBar步进值时fromUser为false.

在使用HIDL接口获取接口参数时,需要先定义数据结构来存储参数,在方法调用时将数据结构传递给HIDL接口。下面是一个简单的代码实例,假设我们要获取设备的温度和湿度: 1. 定义数据结构 ```cpp // 定义温度和湿度数据结构 struct SensorData { float temperature; float humidity; }; ``` 2. 定义服务接口 ```cpp // 定义服务接口 interface ISensorService { // 获取传感器数据方法 SensorData getSensorData(); }; ``` 3. 生成C++代码 在命令行中使用hidl-gen工具生成C++代码: ```bash hidl-gen -Lc++ -randroid.hardware:sensor@1.0 -o /path/to/output /path/to/hal/interfaces ``` 4. 实现服务端 在服务端实现类中实现服务接口中定义的方法,这里是获取温度和湿度的方法: ```cpp // 实现服务接口 struct SensorService : public ISensorService { // 获取传感器数据方法的实现 SensorData getSensorData() override { SensorData data; // 获取温度和湿度 data.temperature = getTemperature(); data.humidity = getHumidity(); return data; } }; ``` 5. 编写客户端代码 在客户端代码中调用服务接口中定义的方法,获取温度和湿度数据: ```cpp // 获取传感器数据方法的调用 sp<ISensorService> sensor = ISensorService::getService(); SensorData data = sensor->getSensorData(); LOGD("Temperature: %f, Humidity: %f", data.temperature, data.humidity); ``` 在这个例子中,我们定义了一个SensorData结构体来存储温度和湿度数据,定义了一个ISensorService接口来获取传感器数据,然后在服务端实现类中实现了getSensorData()方法来获取温度和湿度数据。客户端代码中调用了getService()方法来获取ISensorService接口的代理类,并调用getSensorData()方法来获取温度和湿度数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值