2014-09-05 3 views
1

디스플레이 (또는 부모) 높이보다 큰 높이로 사용자 정의보기를 만들려고합니다. 이보기는 스크롤 할 수 있어야합니다. 나는 새로운 손가락 위치를 측정하기 위해 onTouchEvent를 사용하고 실제로 원하는 것을 얻지 만 내보기는 움직이지 않습니다. 인터넷에서 문제의 해결책을 찾았지만 적절한 대답을 찾지 못했습니다. 이 내보기scrollBy()가 스크롤되지 않습니다.

public class SmartScroll extends View{ 
public SmartScroll(Context context) { 
    super(context); 
} 

int count = 0; 
int yStart = 0, yEnd = 0; 
@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch(event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      yStart = (int) event.getY(); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      MeasureSpec.toString(getMeasuredHeight()); 
      MeasureSpec.toString(getMeasuredWidth()); 
      count++; 
      yEnd = (int) event.getY(); 
      scrollBy(0, (yEnd - yStart)); 
      yStart = yEnd; 
      break; 
     case MotionEvent.ACTION_UP: 
      yStart = 0; 
      yEnd = 0; 
      break; 
    } 
    return true; 
} 

그리고 이것은 내가 그것을 비활성 만드는 방법은 다음과 같습니다

public class MyActivity extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    SmartScroll scrollView = new SmartScroll(getApplicationContext()) { 
     @Override 
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
      super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(1500, MeasureSpec.EXACTLY)); 
     } 
    }; 
    scrollView.setBackgroundDrawable(getResources().getDrawable(R.drawable.gradient)); 
    setContentView(scrollView); 
} 

을}

, 나를 불행하게도 나는 찾지 못했습니다은

+0

대신 스크롤 가능보기를 구현하는 대신 왜 사용자 정의보기를 ScrollView/HorizontalScrollView에 래핑하지 않을까요? – Luksprog

+0

이 뷰는 매우 복잡한 뷰 계층 구조가있는 큰 프로젝트의 일부가 될 것입니다. Ar 현재로서는이 기능이 사용자가 제안한대로 작동하지만보기의 측정 및 레이아웃을보다 잘 관리하려면이 사용자 지정보기가 필요합니다. – Lanitka

답변

1

를 작동하도록 도와주세요 내 질문에 대한 대답. scrollBy() 또는 scrollTo()를 사용하는 인터넷에서 작업 예제를 시도하고 실제로 작동합니다. 그래서 저는 저에게 적합한 솔루션을 발견했습니다. 내 사용자 정의보기의 내용을 이동할 수 없기 때문에 전체보기를 이동하기로 결정했습니다. onTouchEvents를 듣고 내 뷰의 새로운 Y 좌표를 설정하면됩니다. 새 Y를 설정 한 후 invalidate()를 호출합니다.

업데이트 : 마침내 내 초기 문제의 원인을 발견했습니다. 그것은 내가 사용자 정의 ViewGroup을 생성하는 방식이었습니다. 내 ViewGroup의 높이를 부모의 높이보다 크게 설정하고 내용을 스크롤하려고했습니다. 그러나 내용은 ViewGroup과 크기가 같았 기 때문에 scrollBy()는 내용을 스크롤 할 필요가 없습니다. 내가 한 일은 내 ViewGroup에 어린이를 채워 콘텐츠가보기보다 커지고 내 ViewGroup을 MatchParent로 측정하고 마지막으로 scrollBy()가 작업을 시작하도록했습니다.

관련 문제