2011-05-16 31 views
2

你好,我正在尝试为我的应用制作一个均衡器,但我无法弄清楚如何制作按钮。我真的不知道该如何解释自己,所以这里是揭示比我的话更图片: enter image description here如何在android中制作可滚动按钮

我是否需要动画?你们能否指引我朝着正确的方向发展?

在此先感谢。

+0

在我看来,你需要创建扩展的ImageButton或imageview的按钮自定义视图和处理触摸事件。这是第一个新手想法。 – 2011-05-16 19:12:31

+0

@Madcoderz:我想在我的应用程序中创建一个音乐均衡器。可以帮助我。 – AB1209 2013-06-12 17:51:54

回答

0

我认为你的意思是SeekBar。这是Android的JSlider。

+0

正是我在找的东西。非常感谢 – madcoderz 2011-05-16 19:27:08

+0

@Ted我发现[This older](http://stackoverflow.com/questions/631238/modifying-the-android-seekbar-widget-to-operate-vertically)主题具有相同的问题。 – 2011-05-16 19:50:38

+0

是的,该线程上的建议还需要一个自定义小部件。我认为这会比尝试子类化SeekBar并强制它垂直操作要容易得多。 – 2011-05-16 19:59:11

2

有一个很好的教程here创建一个里程表部件。它并不是你想要的样子,但许多(大部分)相同的问题都适用,包括自定义渲染,处理触摸事件以及将一系列子部件连接到更大的控件中。这是我看到你的图形时首先想到的东西。

+0

这可能是有用的。谢谢 – madcoderz 2011-05-16 19:27:52

1

这是简单的垂直搜索栏....

public class SimpleVerticalSeekBar extends SeekBar { 

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

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

    public SimpleVerticalSeekBar(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: 
       setProgress(getMax() - (int) (getMax() * event.getY()/getHeight())); 
       onSizeChanged(getWidth(), getHeight(), 0, 0); 
       break; 

      case MotionEvent.ACTION_CANCEL: 
       break; 
     } 
     return true; 
    } 
} 
相关问题