2012-12-04 3 views
0

enter image description here 패키지 android.widget;수직 탐색 바가 비정상적으로 동작합니다

import android.content.Context; 
import android.graphics.Canvas; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 

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

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

위의 코드를 사용하여 검색 바를 사용자 정의했습니다. 내 seekbar의 엄지가 거꾸로 표시됩니다. 즉 엄지 손가락은 정상적으로 행동해야하므로 엄밀히 말하면 반대 방향으로 행동합니다. 내 목록 뷰가 시작되면 엄지 손가락은 탐색 바의 마지막 위치에 있고 그 반대도 마찬가지입니다. 도움!!!!!!!

enter image description here

+0

당신은 그것이 작동하는 방법의 샘플 스크린 샷을 게시 할 수 있습니까? –

+0

엄지 손가락은 꼭대기에 있어야합니다 ..하지만 아래쪽에 있습니다 .. 그리고리스트 뷰가 아래로 스크롤하면 엄지 손가락이 올라갑니다 .. 이것은 단지 역방향 행동입니다 ....... –

답변

1

나는 동일한 코드에서 반전 SeekBar를 구현을 만들었습니다. 이 기능이 Vertical Seek Bar에서 작동하는 동안 나는 당신의 경우에 도움이 될 거꾸로 한 것을 시도했다. 내 프로젝트를 github에 추가했습니다. 여기에 대한 링크가 있습니다.

https://github.com/AndroSelva/Vertical-SeekBar-Android

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

     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(100-i); 
       Log.i("Progress",getProgress()+""); 
       onSizeChanged(getWidth(), getHeight(), 0, 0); 
       break; 

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

고마워요 매우 많이 .. 변경됨 : c.rotate (90); c.translate (0, -getWidth()); 그리고 도움이되었습니다. –

+0

정말 도움이되어 기쁩니다. 그리고 답을 수락 해 주셔서 감사합니다. –

관련 문제