何も見つからない質問があります。ページごとにスクロールするように HorizontalScrollLayout を変更しました。短い問題ですべてうまくいきます。非常にゆっくりとスクロールすると、smoothScrollTo 関数が呼び出されます (デバッグできます) が機能しません。ScrollLayout は 2 つのページの間に留まります。scrollTo 関数に変更すると機能しますが、見栄えが悪くなります。HTC Oneを使って機能を確認しています。誰も問題を知っていますか?それはおそらく HTC の問題ですか、それとも他のプラットフォームにも存在しますか? 機能を実現する別のスマートな方法はありますか? これが私のコードです:
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
public class FullscreenActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fullscreen);
final HorizontalScrollView scr = new HorizontalScrollView(this){
int scrollXBegin = 0;
private void setScrollXBegin(int beg){
this.scrollXBegin = beg;
}
@Override
public boolean onTouchEvent(MotionEvent ev){
switch (ev.getActionMasked()){
case MotionEvent.ACTION_OUTSIDE:
case MotionEvent.ACTION_UP:
this.scrollReady(ev);
break;
case MotionEvent.ACTION_DOWN:
this.setScrollXBegin(this.getScrollX());
break;
default:
break;
}
return super.onTouchEvent(ev);
}
@Override
public void fling (int velocityY)
{
/*Scroll view is no longer gonna handle scroll velocity.
* super.fling(velocityY);
*/
}
protected boolean scrollReady(MotionEvent ev){
int actXPos = (int)this.getScrollX();
int motionDirection = actXPos - this.scrollXBegin;
int i = 0;
int sz_act = 0;
int sz_old = 0;
for(i = 0; i < ((LinearLayout)this.getChildAt(0)).getChildCount(); i++){
sz_old = sz_act;
sz_act += ((LinearLayout)this.getChildAt(0)).getChildAt(i).getWidth();
if(sz_act > actXPos)
break;
}
// Fertig scrollen auf den naechsten Child
if (motionDirection >= 0)
this.smoothScrollTo(sz_act, this.getScrollY());
else
this.smoothScrollTo(sz_old, this.getScrollY());
computeScroll();
return true;
}
};
final LinearLayout scrollLayout = new LinearLayout(this);
scrollLayout.setOrientation(LinearLayout.HORIZONTAL);
scr.addView(scrollLayout);
scr.setSmoothScrollingEnabled(true);
LayoutParams imLP = new LayoutParams();
imLP.height = 1024;
imLP.width = 1024;
ImageView im1 = new ImageView(this);
im1.setImageResource(R.drawable.ic_launcher);
im1.setLayoutParams(imLP);
scrollLayout.addView(im1);
ImageView im2 = new ImageView(this);
im2.setImageResource(R.drawable.ic_launcher_r);
im2.setLayoutParams(imLP);
scrollLayout.addView(im2);
im1 = new ImageView(this);
im1.setImageResource(R.drawable.ic_launcher_b);
im1.setLayoutParams(imLP);
scrollLayout.addView(im1);
((FrameLayout)findViewById(R.id.parent_layout)).addView(scr);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Trigger the initial hide() shortly after the activity has been
// created, to briefly hint to the user that UI controls
// are available.
}
}`
テストする完全な Eclipse プロジェクトを次に示します。
https://www.dropbox.com/sh/m2dedsa3w3avgec/CdTX8cFJhk/TestVerticalScroll.rar