제 문제는 제가 스크롤러를 사용하고 캔버스를 그릴 때입니다. 그것은 원활하게 스크롤하지만 비트 맵 + 캔버스를 그릴 때 스크롤러 스크롤이 매우 느리면 스크롤이 너무 무거워서 왜 느린 패션으로 스크롤 하는지를 의미합니다.스크롤러를 부드럽게 스크롤하는 방법은 무엇입니까?
이 문제를 해결하는 방법은 무엇입니까?
제 문제는 제가 스크롤러를 사용하고 캔버스를 그릴 때입니다. 그것은 원활하게 스크롤하지만 비트 맵 + 캔버스를 그릴 때 스크롤러 스크롤이 매우 느리면 스크롤이 너무 무거워서 왜 느린 패션으로 스크롤 하는지를 의미합니다.스크롤러를 부드럽게 스크롤하는 방법은 무엇입니까?
이 문제를 해결하는 방법은 무엇입니까?
나는 OpenGL
도 경험이 없지만 스 와이프 (안드로이드의 API에서 fling이라고 함)는 달성하기가 어렵지 않습니다. 이러한 사용자 정의보기를 할 때 당신이 필요로 우선은 GestureDetector
을 구현하고 스크롤러를해야하는 onFling()
방법에 대한보기의 onTouchEvent()
GestureDetector mGD = new GestureDetector(getContext(),
new SimpleOnGestureListener() {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
// beware, it can scroll to infinity
scrollBy((int)distanceX, (int)distanceY);
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float vX, float vY) {
mScroller.fling(getScrollX(), getScrollY(),
-(int)vX, -(int)vY, 0, (int)mMaxScrollX, 0, (int)mMaxScrollY);
invalidate(); // don't remember if it's needed
return true;
}
@Override
public boolean onDown(MotionEvent e) {
if(!mScroller.isFinished()) { // is flinging
mScroller.forceFinished(true); // to stop flinging on touch
}
return true; // else won't work
}
});
@Override
public boolean onTouchEvent(MotionEvent event) {
return mGD.onTouchEvent(event);
}
OnGestureListener.onScroll()
동안 통화를 직접 View.scrollBy()
년 onTouchEvent()
를 호출한다.
Scroller
은 참조로 말하면 스크롤을 캡슐화하는 단순한 개체입니다. 그것은 연속 스크롤 또는 flings에 반응하는 데 사용될 수 있습니다. 자체 내에서 날뛰는 스크롤의 "시뮬레이션"시작 Scroller.fling()
, 그것을 보면서 당신은 지속적인 다시 그리기 애니메이션과의 부드러움을 복사 할 수 있습니다 : 애니메이션이 실행 될 때까지
@Override
protected void onDraw(Canvas canvas) {
// ....your drawings....
// scrollTo invalidates, so until animation won't finish it will be called
// (used after a Scroller.fling())
if(mScroller.computeScrollOffset()) {
scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
}
}
, 우리가 도달 한 지점을 계산하고이 스크롤 .
마지막주의 사항 : 아래에서 아무 것도하지 않으려는 경우에도 OnGestureListener.onDown()
에서 true를 반환해야합니다. 그렇지 않으면 작동하지 않습니다.
안드로이드 2.2의 Scroller
에는 fling 애니메이션이 인수로 전달한 한계에 도달하더라도 실제로 종료되지 않는 버그가 있으므로 (계산 된 오프셋은이를 고려하므로 실제로 이동하지 않습니다)주의해야합니다. .
안녕하세요 마이크, reply.this 개념에 대한 고마워요 때 캔버스가 그릴 때만 괜찮을 때 작동합니다 무승부 이미지 + 캔버스 (비트 맵) 제대로 작동하지 않습니다. –
여기에서 도난당했습니다. http://stackoverflow.com/a/4951681/1228 – Will
죄송합니다. 귀하의 질문에 비판적인 사용자가 답변을하였습니다. 나는 당신이이 질문을 확인하는 것이 좋습니다 : http://stackoverflow.com/questions/4951142/smooth-scrolling-in-android – Will