私の問題は、私がスクロールを使用してキャンバスを描いているときです。スムーズにスクロールしますが、ビットマップ+キャンバスを描くとスクロールスクロールが非常に遅いということは、スクロールするのが重いことを意味します。スクロールをスムーズにスクロールする方法は?
この問題を解決するにはどうすればよいですか?
私の問題は、私がスクロールを使用してキャンバスを描いているときです。スムーズにスクロールしますが、ビットマップ+キャンバスを描くとスクロールスクロールが非常に遅いということは、スクロールするのが重いことを意味します。スクロールをスムーズにスクロールする方法は?
この問題を解決するにはどうすればよいですか?
私はOpenGL
も加速度センサーでも経験はありませんが、スワイプ(Androidの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
は、参照のとおり、スクロールをカプセル化する単純なオブジェクトです。それは連続スクロールやフイングに反応するために使用できます。 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を返すようにしてください。そうしないと動作しません。
Android 2.2のScroller
には引数として渡された制限に達しても実際にアニメーションが終了しないバグがあるので注意してください(計算されたオフセットはそれらを尊重しているため実際には移動しません) 。
こんにちはマイク、描画イメージ+キャンバス(ビットマップ)正しく動作していないbcozは重いです。 –
ここから盗まれたhttp://stackoverflow.com/a/4951681/1228 – Will
申し訳ありません、あなたの質問には非倫理的なユーザーが回答しました。私はあなたがこの質問をチェックすることをお勧めします:http://stackoverflow.com/questions/4951142/smooth-scrolling-in-android – Will