0

何も見つからない質問があります。ページごとにスクロールするように Horizo​​ntalScrollLayout を変更しました。短い問題ですべてうまくいきます。非常にゆっくりとスクロールすると、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

4

0 に答える 0