0

内部に2つのテキストビューを持つ一般的なフラグメントがあります:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/background_image"/>    

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="150dp">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:id="@+id/title"
            style="@style/IntroTitle"
            android:text="TITLE"
            android:layout_marginLeft="30dp"
            android:layout_marginRight="30dp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:id="@+id/description"
            style="@style/IntroDescription"
            android:text="Description"
            android:layout_marginTop="8dp"
            android:layout_marginLeft="30dp"
            android:layout_marginRight="30dp"/>

    </LinearLayout>

</RelativeLayout>

このレイアウトは IntroFragment によって使用され、このクラスは ViewPager (PageAdapter) で 5 回インスタンス化されます。

        @Override
        public Fragment getItem(int position) {
            Fragment fragment = null;
            Bundle bundle = new Bundle();
            switch (position) {
                case 0:
                    fragment = IntroFragment.newInstance(getString(R.string.intro_title_screen_1),
                            getString(R.string.intro_desc_screen_1));
                    break;
                case 1:
                    fragment = IntroFragment.newInstance(getString(R.string.intro_title_screen_2),
                            getString(R.string.intro_desc_screen_2));
                    break;
                case 2:
...

私の PageTransformer では、X でタイトルと説明を翻訳したいのですが、このコードの動作はおかしいです:

mViewPager.setPageTransformer(true, new ViewPager.PageTransformer() {
            @Override
            public void transformPage(View view, float position) {
                int pageWidth = view.getWidth();

                if (position <= -1) { // [-Infinity,-1)
                    // This page is way off-screen to the left.
                } else if (position <= 1) { // [-1,1] 

                    TextView textview = (TextView) view.findViewById(R.id.description);
                    textview.setTranslationX((float) (-(1 - position) * 1.2 * pageWidth));

                    textview = (TextView) view.findViewById(R.id.title);
                    textview.setTranslationX((float) (-(1 - position) * 1.2 * pageWidth));

                } else { // (1,+Infinity]
                    // This page is way off-screen to the right.
                }
            }
        });

そのような一般的なフラグメントを使用し、内部の特定のウィジェットで PageTransformer を使用することは可能ですか (私の場合、タイトルと説明のテキストビューのように) ?

タイトルと説明のテキストビューで、X 変換をより高速に実行したいだけです (右側または左側はスライドの方法によって異なります)。

助けてくれてありがとう!

4

1 に答える 1

0

タイトルと説明のテキストビューで、X 変換をより高速に実行したいだけです (右側または左側はスライドの方法によって異なります)。

はい、可能です。position右に移動すると 0 より大きく、左に移動すると 0 より小さくなります。コードでは、速度係数がハードコーディングされています ( 1.2)。ニーズに合った数学関数または値のセットを見つける必要があります。

于 2015-05-28T07:36:23.857 に答える