7

ビューを動的にロードして水平方向にスクロールするために、アプリケーションでビューページャーを使用しています。また、pageTransform を使用して、次のビューと前のビューをスケーリングしました。からコードを取得しました

http://developer.android.com/training/animation/screen-slide.html

次の各ビューは、前のビューのユーザー応答に依存します。各 OnPageSelected で、次のビューを読み込んでいます

    mPagerAdapter.addView(ViewToBeAdded, AddAtPostion); //Empty previous view holder
    mViewPager.setAdapter(mPagerAdapter);

問題のステップ 1: setAdapter を実行すると、ビューページャー全体が最初の位置にスクロールします (なぜこれが起こっているのかわかりません)。

問題のステップ 2 :問題 1 を回避するために、私は電話しました

    mViewPager.setCurrentItem(AddAtPostion, false);. 

//2 番目のパラメーターを true として呼び出すと、viewPager は最初の項目から現在の項目までスクロールします。

ただし、これを呼び出すと、pageTransform によって設定された変換が削除され (スクロール時にのみ適用されるため)、前のビュー ホルダーが変換なしで表示されます。

問題のステップ 3:問題 2 を回避するために、setCurrentItem の後に偽のドラッグを呼び出すランナブルを追加しました (できるだけ早く PageTransformer を PagerView に適用することから学んだように)

private Handler mhandler = new Handler();
private Runnable mrunnable = new Runnable() {
    public void run() {

        mViewPager.beginFakeDrag();
        mViewPager.fakeDragBy(0f);
        mViewPager.endFakeDrag();

    }
};
//Called as mhandler.postDelayed(mrunnable, 10); after setCurrentItem.

これは、変換を適用するという私の問題を解決します。ただし、変換が適用される前に、空のビュー ホルダーが一瞬表示されます。私は途方に暮れています。私は Android の初心者で、問題を解決する方法がわかりません。問題 1 自体が解決されれば、回避策を探す必要はありません。

以下に投稿されているのは、ビューを追加し、前のビューを空のレイアウトで膨らませるコードです

public int addView(View v, int position) {

    prevPos = currPos;
    currPos = position;

    LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if(prevPos != -1)
    {
        views.set(prevPos, ((View) inflater.inflate(R.layout.empty_template, null, false)));
    }

    views.set(currPos, v);



    return position;
}

ログキャット:

06-20 16:50:54.890: D/AndroidRuntime(8810): Shutting down VM
06-20 16:50:54.890: W/dalvikvm(8810): threadid=1: thread exiting with uncaught exception (group=0x40bc51f8)
06-20 16:50:54.914: E/AndroidRuntime(8810): FATAL EXCEPTION: main
06-20 16:50:54.914: E/AndroidRuntime(8810): java.lang.NullPointerException
06-20 16:50:54.914: E/AndroidRuntime(8810):     at android.support.v4.view.ViewPager.endFakeDrag(ViewPager.java:2234)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at mpkgname.mactivityname$1.run(mactivityname.java:202)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at android.os.Handler.handleCallback(Handler.java:605)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at android.os.Looper.loop(Looper.java:137)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at android.app.ActivityThread.main(ActivityThread.java:4514)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at java.lang.reflect.Method.invokeNative(Native Method)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at java.lang.reflect.Method.invoke(Method.java:511)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
06-20 16:50:54.914: E/AndroidRuntime(8810):     at dalvik.system.NativeStart.main(Native Method)
06-20 16:51:19.992: D/dalvikvm(8810): Debugger has detached; object registry had 658 entries
4

0 に答える 0