2013-04-27 78 views
0

我想通过使其垂直并改变进度和拇指图像来自定义搜索栏。但是,当我尝试设置进度图像时,它会显示非常薄的图像而不是完整的图像。这可以如何实现?SeekBar在android

XML文件

<com.example.verticalseekbar.VerticalSeekbar 
    android:id="@+id/seekbar" 
    android:layout_width="300dip" 
    android:layout_height="116dp" 
    android:layout_marginRight="10dip" 
    android:padding="8dp" 
    android:progressDrawable="@drawable/panel" 
    android:thumb="@drawable/thumb1" > 
</com.example.verticalseekbar.VerticalSeekbar> 
+0

你能提供你的代码和插图吗? – 2013-04-27 12:48:36

+0

将您的问题标题名称更改为“Android中的垂直SeekBar”。这对其他人会有帮助。 – 2013-04-27 12:58:58

回答

1

您可以通过自定义搜索栏做到这一点。 之前自定义搜索栏,你需要了解以下

1.Layer List 
2.Animation List 
3.Selector 

我已经发布了完整的教程这方面有看this。 希望这会帮助你很多。 对于VerticalSeekBar使用下面的代码

public class VerticalSeekBar extends AbsVerticalSeekBar { 

    /** 
    * A callback that notifies clients when the progress level has been 
    * changed. This includes changes that were initiated by the user through a 
    * touch gesture or arrow key/trackball as well as changes that were initiated 
    * programmatically. 
    */ 
    public interface OnSeekBarChangeListener { 

     /** 
     * Notification that the progress level has changed. Clients can use the fromUser parameter 
     * to distinguish user-initiated changes from those that occurred programmatically. 
     * 
     * @param seekBar The SeekBar whose progress has changed 
     * @param progress The current progress level. This will be in the range 0..max where max 
     *  was set by {@link ProgressBar#setMax(int)}. (The default value for max is 100.) 
     * @param fromUser True if the progress change was initiated by the user. 
     */ 
     void onProgressChanged(VerticalSeekBar seekBar, int progress, boolean fromUser); 

     /** 
     * Notification that the user has started a touch gesture. Clients may want to use this 
     * to disable advancing the seekbar. 
     * @param seekBar The SeekBar in which the touch gesture began 
     */ 
     void onStartTrackingTouch(VerticalSeekBar seekBar); 

     /** 
     * Notification that the user has finished a touch gesture. Clients may want to use this 
     * to re-enable advancing the seekbar. 
     * @param seekBar The SeekBar in which the touch gesture began 
     */ 
     void onStopTrackingTouch(VerticalSeekBar seekBar); 
    } 

    private OnSeekBarChangeListener mOnSeekBarChangeListener; 

    public VerticalSeekBar(Context context) { 
     this(context, null); 
    } 

    public VerticalSeekBar(Context context, AttributeSet attrs) { 
     this(context, attrs, android.R.attr.seekBarStyle); 
    } 

    public VerticalSeekBar(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    void onProgressRefresh(float scale, boolean fromUser) { 
     super.onProgressRefresh(scale, fromUser); 

     if (mOnSeekBarChangeListener != null) { 
      mOnSeekBarChangeListener.onProgressChanged(this, getProgress(), fromUser); 
     } 
    } 

    /** 
    * Sets a listener to receive notifications of changes to the SeekBar's progress level. Also 
    * provides notifications of when the user starts and stops a touch gesture within the SeekBar. 
    * 
    * @param l The seek bar notification listener 
    * 
    * @see SeekBar.OnSeekBarChangeListener 
    */ 
    public void setOnSeekBarChangeListener(OnSeekBarChangeListener l) { 
     mOnSeekBarChangeListener = l; 
    } 

    @Override 
    void onStartTrackingTouch() { 
     if (mOnSeekBarChangeListener != null) { 
      mOnSeekBarChangeListener.onStartTrackingTouch(this); 
     } 
    } 

    @Override 
    void onStopTrackingTouch() { 
     if (mOnSeekBarChangeListener != null) { 
      mOnSeekBarChangeListener.onStopTrackingTouch(this); 
     } 
    } 

} 
+0

嗨Dipu。这是一个很好的教程。但是,能否请你解释一下你提到的所有图像?像seekbar_total.9.png等,它在progress_horizo​​ntal某处使用。 – Aada 2013-04-27 13:11:01

+0

是的,我已经在那里解释了短暂的阅读正确和学习代码太1好的知识,然后开始编码 – Dilip 2013-04-27 13:12:17

0

使用此自定义搜索栏。在XML

package com.tt.droidtracker.widget; 

public class VerticalSeekBar extends SeekBar { 

public VerticalSeekBar(Context context) { 
    super(context); 
} 

public VerticalSeekBar(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

public VerticalSeekBar(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
    super.onSizeChanged(h, w, oldh, oldw); 
} 

@Override 
protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(heightMeasureSpec, widthMeasureSpec); 
    setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth()); 
} 

protected void onDraw(Canvas c) { 
    c.rotate(-90); 
    c.translate(-getHeight(),0); 

    super.onDraw(c); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (!isEnabled()) { 
     return false; 
    } 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
     case MotionEvent.ACTION_MOVE: 
     case MotionEvent.ACTION_UP: 
      int i=0; 
      i=getMax() - (int) (getMax() * event.getY()/getHeight()); 
      setProgress(i); 
      Log.i("Progress",getProgress()+""); 
      onSizeChanged(getWidth(), getHeight(), 0, 0); 
      break; 

     case MotionEvent.ACTION_CANCEL: 
      break; 
    } 
    return true; 
} 

} 

这个XML代码中使用与您的包名

<com.tt.droidtracker.widget.VerticalSeekBar 
    android:id="@+id/Seekbar" 
    android:layout_width="wrap_content" 
    android:layout_height="300dip" 
    android:layout_marginRight="10dip" 
    android:padding="8dp" 
    android:progressDrawable="@drawable/seekbar_progress" 
    android:thumb="@drawable/img_seek_handler" /> 

沿希望它能对您有所帮助。

+0

接受为他人的答案,如果它对你有帮助。 – 2013-04-27 12:57:44

+0

你好Vishesh,我可以通过seekbar垂直,并保持我的图像在res/drawable和同样的审判他们,但seekbar不增加其高度 – Aada 2013-04-27 13:12:38

+0

你可以在这里发表你的XML代码? – 2013-04-27 13:13:44