高级控件之拖动条(SeekBar)的使用

一.拖动条的基础知识

      拖动条与进度条类似,所不同的是,拖动条允许用户拖动滑块来改变值,通常用于实现对某中数值 的调节,例如,调节图片的透明度或是音量等.

(一)XML中设置:

<SeekBar
android:id="@+id/seekBar1" 
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100" 
android:padding="10px" 
android:progress="50" />

(二)常用属性:

  1. android:max=”100” 进度条的最大值
  2. android:padding=”10px” 进度条的边距
  3. android:progress=”50” 进度条的初始值
    并且我们一般都需要给SeekBar一个拖动的监听,当用户操作后,我们需要根据操作的值来调整我们的程序

(三)监听事件:

//监听拖动条值变化事件
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//当用户停止拖动时
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
//当用户开始拖动时
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress ,
boolean fromUser) {
//当进度改变时
//progress代表改变的进度值
//而fromUser代表是否是用户的操作改变的,如果为false,一般是我们代码中进行了进度设置。如果为true代表的是用户手动拖动拖动条。
}
});

二.拖动条实现改变手机音量的示例

(一)布局文件代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <SeekBar
        android:id="@+id/seekBar1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="185dp" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@id/seekBar1"
        android:layout_below="@id/seekBar1"
        android:text="0/100" />

</RelativeLayout>

(二)java代码设计

package com.example.lesson7_seekbar;

import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class MainActivity extends Activity {
    //定义布局内的控件
    SeekBar seekBar;//拖动条
    TextView tv;//显示音量大小
    AudioManager manager;//音量管理器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化
        seekBar = (SeekBar) findViewById(R.id.seekBar1);
        tv = (TextView) findViewById(R.id.tv);
        //给拖动条设置拖动的监听事件
        seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // 拖拽完毕
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // 开始拖拽时 用户刚好点上去
            }

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                // 每次进度改变都会调用
                // 是否是用户改变的呢???
                // if (fromUser) {
                tv.setText(progress + "/" + seekBar.getMax());
                // }
                // 拖动进度条,我需要改变音量
                // flags用来 需不需要声音 是否需要ui
                manager.setStreamVolume(AudioManager.STREAM_MUSIC, progress,
                        AudioManager.FLAG_SHOW_UI
                                | AudioManager.FLAG_PLAY_SOUND);

            }
        });
        // seekBar.setMax(200);
        // seekBar.setProgress(50);

        // 获取系统服务
        // 获取音频管理器
        manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        // 获取他的最大值 0-15
        int max = manager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        seekBar.setMax(max);
        // 本来就有一个声量值
        int volumn = manager.getStreamVolume(AudioManager.STREAM_MUSIC);
        Log.e("TAG", volumn + "   ");
        seekBar.setProgress(volumn);
    }

    /**
     * 监听手机音量键 的回调方法
     * 如果使用音量键来改变手机音量,拖动条也改变
     */
    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
            // ++
            seekBar.setProgress(seekBar.getProgress() + 1);
        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
            seekBar.setProgress(seekBar.getProgress() - 1);
        }
        return super.onKeyUp(keyCode, event);
    }
}

程序运行后的界面:
t2

拖动进度条显示的界面:

t2

这就是进度条的简单应用示例。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峥嵘life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值