zoukankan      html  css  js  c++  java
  • android学习SeekBar的使用

      

    SeekBar介绍
    听歌的时候,我们常常想快进或者快退到某一时间段,听歌的时候我们控制音量大小听歌,SeekBar可以通过滑块的位置来标示数值,
    而且拖动条允许用户拖动滑块来改变进度条的大小

    SeekBar的主要属性和方法
    (1)setMax --- 设置SeekBar的最大数值
    (2)setProgress --- 设置SeekBar的当前数值
    (3)setSecondProgress---设置SeekBar的第二数值

    即当前拖动条的推荐位置
    SeekBar的事件
    由于拖动条可以诶用户控制。所以需要对其事件监听,这就需要实现SeekBar.OnSeekBarChangeListner接口,此接口共需监听
    三个事件分别是:
    数值改变----onProgressChanged
    开始拖动----onStartTrackingTouch
    停止拖动----onStopTrackingTouch

    1,布局文件
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <SeekBar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/seekBar"
            android:max="100"
            android:progress="50"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/textView" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/textView2" />
    </LinearLayout>

      2,MainActivity

    public class MainActivity extends Activity implements SeekBar.OnSeekBarChangeListener{
    
        private SeekBar seekBar;
        private TextView tv1;
        private TextView tv2;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            seekBar = (SeekBar)findViewById(R.id.seekBar);
            seekBar.setOnSeekBarChangeListener(this);
            tv1 = (TextView)findViewById(R.id.textView);
            tv2 = (TextView)findViewById(R.id.textView2);
    
        }
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            tv2.setText(progress+"");
        }
    
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            tv1.setText("开始拖动");
        }
    
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            tv1.setText("停止拖动");
        }
    }
    自定义SeekBar的进度条
    改变进度条的样式
    android:ProgressDrawable = “@drawable/seekBar_img”
    改变滑块的样式
    android:thumb = @drawable/thumb
      3,改变滑块的样式
      和ProgressBar 一样,我们需要进入SeekBar 的样式文件看一看
     <style name="Widget.SeekBar">
            <item name="android:indeterminateOnly">false</item>
            <item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
            <item name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item>
            <item name="android:minHeight">20dip</item>
            <item name="android:maxHeight">20dip</item>
            <item name="android:thumb">@android:drawable/seek_thumb</item>
            <item name="android:thumbOffset">8dip</item>
            <item name="android:focusable">true</item>
            <item name="android:mirrorForRtl">true</item>
        </style>

        我们可以看到他的滑块是这个样式@android:drawable/seek_thumb,继续我们可以在data esdrawable下找到seek_thumb.xml这个文件,他就是滑块的样式

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_pressed="true"
              android:state_window_focused="true"
              android:drawable="@drawable/seek_thumb_pressed" />
    
        <item android:state_focused="true"
              android:state_window_focused="true"
              android:drawable="@drawable/seek_thumb_selected" />
    
        <item android:state_selected="true"
              android:state_window_focused="true"
              android:drawable="@drawable/seek_thumb_selected" />
    
        <item android:drawable="@drawable/seek_thumb_normal" />
    
    </selector>

      可以看到他是一个选择器,这样,我们想要改变滑块的样式,只需要修改这个选择器即可。

      在drawable下放置两种滑块图片

      my_thumb.xml

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:drawable="@drawable/select" android:state_pressed="true" android:state_window_focused="true"/>
        <item android:drawable="@drawable/select" android:state_focused="true" android:state_window_focused="true"/>
        <item android:drawable="@drawable/select" android:state_selected="true" android:state_window_focused="true"/>
        <item android:drawable="@drawable/normal"/>
    
    </selector>

      更改SeekBar的thumb属性

     <SeekBar
            android:thumb="@drawable/my_thumb"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/seekBar"
            android:max="100"
            android:progress="50"/>
    就可以看到我们想要的滑块效果了。
     
  • 相关阅读:
    C++-蓝桥杯-颠倒的价牌[2013真题][水题][模拟]
    C++-蓝桥杯-振兴中华[2013真题][水题][dp/递归]
    C++-蓝桥杯-排它平方数[2013][水题][枚举]
    C++-蓝桥杯-高斯日记[2013真题][水题][枚举模拟]
    C++-蓝桥杯-购物清单[2017真题][水题][文件输入]
    C++-蓝桥杯-九宫幻方[暴力搜索][无剪枝]
    C++-LUOGU3834 可持久化线段树(主席树)[模板]
    BASIC-2 01字串
    【掌大】关注回复
    【掌大】纸飞机
  • 原文地址:https://www.cnblogs.com/techdreaming/p/5005715.html
Copyright © 2011-2022 走看看