2011-05-16 3 views
2

안녕하세요. 내 앱용으로 이퀄라이저를 만들려고하는데 버튼을 만드는 방법을 알아낼 수 없습니다. 나는 자신을 설명하는 방법을 모른다. 그래서 내 말보다 더 드러나는 그림이 여기에있다 : enter image description here안드로이드에서 스크롤 가능한 버튼을 만드는 방법

나는 애니메이션이 필요합니까? 너희들이 나를 올바른 방향으로 가리킬 수 있니?

미리 감사드립니다.

+0

당신이하여 ImageButton 또는 이미지 뷰의 버튼을 확장 사용자 정의보기를 만들고 터치 이벤트를 처리 할 필요가 날 것으로 보인다. 그것이 처음으로 생각한 초보자의 생각입니다. –

+0

@ Madcoderz : 내 앱에서 음악 이퀄라이저를 만들고 싶습니다. 저를 도울 수 있습니까? – AB1209

답변

0

나는 SeekBar을 의미한다고 생각합니다. 그것은 안드로이드의 JSlider입니다.

+0

정확히 내가 무엇을 찾고 있었는지. 고마워요 – madcoderz

+0

@ 테드 같은 문제가있는 [this older] (http://stackoverflow.com/questions/631238/modifying-the-android-seekbar-widget-to-operate-vertically) 주제를 발견했습니다. –

+0

그래, 그 스레드에 대한 제안은 또한 사용자 정의 위젯이 필요합니다. SeekBar의 하위 클래스를 만들고 수직으로 작동하도록하는 것보다 훨씬 쉽습니다. –

2

주행 위젯을 만드는 데 유용한 here 튜토리얼이 있습니다. 원하는 모양이 아니지만 사용자 정의 렌더링, 터치 이벤트 다루기, 일련의 하위 위젯을 더 큰 컨트롤로 연결하는 등 많은 (대부분) 동일한 문제가 적용됩니다. 내가 그래픽을 보았을 때 처음 생각한 것입니다.

+0

이 유용 할 수 있습니다. 감사 – madcoderz

1

이 간단 수직 SeekBar를입니다 ....

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; 
    } 
} 
관련 문제