Android SeekBar自定义使用图片和颜色显示

     

1.在res/drawable目录下新增一个xml风格文件,seekbar_define_style.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 未选中 -->
    <item
        android:id="@android:id/background"
        android:drawable="@drawable/hou"/>
    <!-- 中 -->
    <item
        android:id="@android:id/progress"
        android:drawable="@drawable/qian"/>
    <item
        android:id="@android:id/secondaryProgress"
        android:drawable="@drawable/qian"/>
</layer-list>

2.在res/drawable下定义个seekbar_thumb.xml文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">       

    <!-- 按下状态-->
    <item
        android:state_focused="true"
        android:state_pressed="true"
        android:drawable="@drawable/ic_launcher" />
    <!-- 普通无焦点状态 -拖动按钮-->
    <item
        android:state_focused="false"
        android:state_pressed="false"
        android:drawable="@drawable/orbino_icon_pack_006" />
    <!-- 有焦点状态-->
    <item
        android:state_focused="true"
        android:state_pressed="false"
        android:drawable="@drawable/ios" />
    <!-- 有焦点 -->
    <item
        android:state_focused="true"
        android:drawable="@drawable/ios"/>
</selector>

3.在res/layut下定义布局资源文件seekbar_define.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="<a href="http://schemas.android.com/apk/res/android" rel="nofollow">http://schemas.android.com/apk/res/android</a>"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
         android:orientation="vertical"
        >
    <TextView
    android:id="@+id/seekbar_tetview_one"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="SeekBar自定义"
    />
    <TextView
    android:id="@+id/seekbar_tetview_two"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="SeekBar拖动时信息提示"
    />
    <SeekBar
    android:layout_width="321px"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:maxHeight="20px"
    android:minHeight="20px"
    android:paddingLeft="18px"
    android:paddingRight="18px"
    android:max="100"
    android:progressDrawable="@drawable/seekbar_define_style"
    android:thumb="@drawable/seekbar_thumb"
    android:id="@+id/seekBar"/>
 </LinearLayout>
</ScrollView>

4.定义java文件通过 引用布局文件:

package com.test;

import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class SeekBarDemo_DefineDemo extends Activity {
    private SeekBar seekBar;
    private TextView textView_one, textView_two;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.seekbar_define);

        seekBar = (SeekBar) findViewById(R.id.seekBar);

        textView_one = (TextView) findViewById(R.id.seekbar_tetview_one);

        textView_two = (TextView) findViewById(R.id.seekbar_tetview_two);

        seekBar.setOnSeekBarChangeListener(seekbarChangeListener);

    }

    private OnSeekBarChangeListener seekbarChangeListener = new OnSeekBarChangeListener() {

        // 停止拖动时执行
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub
            textView_two.setText("停止拖动了!");

        }

        // 在进度开始改变时执行
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub
            textView_two.setText("进度开始改变");
        }

        // 当进度发生改变时执行
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            textView_two.setText("正在进行拖动操作,还没有停下来一直再拖动");
            Message message = new Message();

            Bundle bundle = new Bundle();// 存放数据

            float pro = seekBar.getProgress();

            float num = seekBar.getMax();

            float result = (pro / num) * 100;
            bundle.putFloat("key", result);

            message.setData(bundle);

            message.what = 0;

            handler.sendMessage(message);

        }
    };

    /**
     * 用Handler来更新UI
     */
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            textView_one.setText("当前拖动位置占 :       "
                    + msg.getData().getFloat("key") + "/100");

        }

    };

}

最后执行效果:

二:使用颜色显示,和尚面是一样的,只有我们定义颜色资源来替代图片资源文件seekbar_define_color_style.xml:如下:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">    

   <item android:id="@android:id/background"
            android:paddingTop="3px"
         android:paddingBottom="3px">
      <shape>
         <corners android:radius="10dip" />
         <gradient
             android:startColor="#ffffffff"
             android:centerColor="#ff000000"
             android:endColor="#ff808A87"
             android:centerY="0.45"
             android:angle="270"/>
      </shape>
   </item>    

   <item android:id="@android:id/progress"
            android:paddingTop="3px"
         android:paddingBottom="3px" >
       <clip>
          <shape>
              <corners android:radius="10dip" />
              <gradient
                  android:startColor="#ffffffff"
                  android:centerColor="#ffFFFF00"
                  android:endColor="#ffAABD00"
                  android:centerY="0.45"
                  android:angle="270"/>
          </shape>
       </clip>
   </item>
 </layer-list>

之后再SeekBar标签使用如下属性进行引入:其他保持不变

android:progressDrawable="@drawable/seekbar_define_color_style"

执行效果:

由于SeekBar的属性thumb引入了自定义的seekbar_thumb.xml文件,拖动图标是我们自定义的图片:除去这个属性

android:thumb="@drawable/seekbar_thumb"

就回复系统默认状态效果最后效果如下:

我们可以通过颜色值再次休息seekbar_thumb.xml文件,使拖动按钮设置成自定义颜色:

时间: 2024-11-11 06:26:48

Android SeekBar自定义使用图片和颜色显示的相关文章

Android 三档自定义滑动开关,禁止点击功能的实现,用默认的seekbar组件实现

android三档自定义滑动开关,禁止点击功能的实现,普通开关网上有很多例子,三档滑动开关的则找了整天都没有相关例子,开始用普通开关的源码修改了自己实现了一个类,但效果不如人意,各种边界情况的算法很难考虑周全很难调试出满意的效果. 今 天尝试用系统组件seekbar实现自定义风格的滑动条,但禁止点击和判断滑动不到指定范围返回花了不少时间,网上基本上都说用继承seekbar修改里 面的方法实现,但整了半天也没有一个能够达到效果了,而且感觉太麻烦了,所以自己把默认的实现的几个接口返回的信息详细打印出

自定义漂亮的Android SeekBar样式

系统自带的SeekBar真是太难看了,项目需要,只能自定义了,先来张效果图 第一个Seekbar 背景是颜色,thumb是图片,上代码: [html] view plaincopy <SeekBar android:id="@+id/timeline" android:layout_width="fill_parent" android:layout_height="wrap_content" android:focusable="

【Android】Android实现自定义带文字和图片的Button

在Android开发中经常会需要用到带文字和图片的button,下面来讲解一下常用的实现办法. 一.用系统自带的Button实现 最简单的一种办法就是利用系统自带的Button来实现,这种方式代码量最小.在Button的属性中有一个是drawableLeft,这个属性可以把图片设置在文字的左边,但是这种方式必须让icon的背景色是透明的,如果icon的背景色不是透明的话,会导致点击按钮时icon部分的背景色不会发生变化. 主要代码: <Button android:id="@+id/bt3

Android实现自定义view---绘制图片

主要原理是:extends view重载onDrow(),需要一bitmap,重载view,在 canvas上画临时bmp,当按下确定的时候按下 画到real_bmp上,其他的跟前面的基本上没有什么区别. import com.example.test.R; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Can

android progressbar 自定义图片匀速旋转

项目中需要使用圆形进度条进行数据加载的显示,所以需要两个步骤 1:自定义progressbar滚动图片 2:匀速旋转图片 步骤一:自定义progressbar图片 <ProgressBar android:id="@+id/head_progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_grav

SeekBar自定义样式

网上的SeekBar自定义样式的资料很多,大多是抄来抄去.我最近用到这个,也从网上抄了一个,但是遇到不少问题,其中一个就是SeekBar的背景条不显示,最后才找到解决方法. 1. 使用自定义SeekBar <SeekBar android:id="@+id/ctrl_seekBar" android:layout_width="wrap_content" android:layout_height="wrap_content" androi

Android进阶——自定义View之自己绘制彩虹圆环调色板

引言 前面几篇文章都是关于通过继承系统View和组合现有View来实现自定义View的,刚好由于项目需要实现一个滑动切换LED彩灯颜色的功能,所以需要一个类似调色板的功能,随着手在调色板有效区域滑动,LED彩灯随即显示相应的颜色,也可以通过左右的按钮,按顺序切换显示一组颜色,同时都随着亮度的改变LED彩灯的亮度随即变化,这篇基本上把继承View重绘实现自定义控件的大部分知识总结了下(当然还有蛮多没有涉及到,比如说自适应布局等),源码在Github上 一.继承View绘制自定义控件的通用步骤 自定

Android中自定义视图View之---前奏篇

前言 好长时间没写blog了,心里感觉有点空荡荡的,今天有时间就来写一个关于自定义视图的的blog吧.关于这篇blog,网上已经有很多案例了,其实没什么难度的.但是我们在开发的过程中有时候会用到一些自定义的View以达到我们所需要的效果.其实网上的很多案例我们看完之后,发现这部分没什么难度的,我总结了两点: 1.准备纸和笔,计算坐标 2.在onDraw方法中开始画图,invalidate方法刷新,onTouchEvent方法监听触摸事件 对于绘图相关的知识,之前在弄JavaSE相关的知识的时候,

Android中自定义视图View之---开发案例

自定义视图View的案例 下面我们就是开始正式的进入自定义视图View了 在讲解正式内容之前,我们先来看一下基本知识 1.我们在自定义视图View的时候正确的步骤和方法 1).必须定义有Context/Attrbuite参数的构造方法,并且调用父类的方法 public LabelView(Context context, AttributeSet attrs) 不然会报错: 2).重写onMeasure方法 @Override protected void onMeasure(int width