6

私はviewPagerとフラグメントを使用しており、カスタムアニメーション、つまりズームアウトページ変換を正確に取得しようとしています。

しかし、いくつかのエラーが発生しています。コードスニペットを使用してエラーをコメントに入れます。

クラスMainActivity

import android.support.v4.app.FragmentManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.Menu;

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);/** Getting a reference to the ViewPager defined the layout file */
        ViewPager pager = (ViewPager) findViewById(R.id.pager);

        /** Getting fragment manager */
        FragmentManager fm = getSupportFragmentManager();

        /** Instantiating FragmentPagerAdapter */
        MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(fm);

        /** Setting the pagerAdapter to the pager object */
        pager.setAdapter(pagerAdapter);

        // **ERROR:The method setPageTransformer(boolean, ViewPager.PageTransformer) in the type ViewPager is not applicable for the arguments (boolean, ZoomOutPageTransformer)**
        pager.setPageTransformer(true, new ZoomOutPageTransformer());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

クラスZoomOutPageTransformer

import android.view.View;
    // **ERROR on 'ViewPager.PageTransformer --> ViewPager cannot be resolved to a type **
    public class ZoomOutPageTransformer implements ViewPager.PageTransformer {
        private static float MIN_SCALE = 0.85f;
        private static float MIN_ALPHA = 0.5f;

        public void transformPage(View view, float position) {
            int pageWidth = view.getWidth();
            int pageHeight = view.getHeight();

            if (position < -1) { // [-Infinity,-1)
                // This page is way off-screen to the left.
                view.setAlpha(0);

            } else if (position <= 1) { // [-1,1]
                // Modify the default slide transition to shrink the page as well
                float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
                float vertMargin = pageHeight * (1 - scaleFactor) / 2;
                float horzMargin = pageWidth * (1 - scaleFactor) / 2;
                if (position < 0) {
                    view.setTranslationX(horzMargin - vertMargin / 2);
                } else {
                    view.setTranslationX(-horzMargin + vertMargin / 2);
                }

                // Scale the page down (between MIN_SCALE and 1)
                view.setScaleX(scaleFactor);
                view.setScaleY(scaleFactor);

                // Fade the page relative to its size.
                view.setAlpha(MIN_ALPHA +
                        (scaleFactor - MIN_SCALE) /
                        (1 - MIN_SCALE) * (1 - MIN_ALPHA));

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

5 に答える 5

6

私は問題を解決しました:

  1. 最新のAndroidSDKをダウンロードする
  2. android- sdk -windows \ extras \ android \ support\v4に移動します
  3. android-support-v4.jarをプロジェクトのlibsフォルダーにコピーします
  4. プロジェクトをクリーンアップする
  5. コードを実行する

これは私にとってはうまくいきました。ecpliseを介してサポートライブラリをダウンロードすると、このエラーが発生しました。これで問題が解決しました

于 2013-06-01T18:01:36.977 に答える
2

@mXXはほぼ正しいです。しかし、(私のように)まだ問題がある人のために、私は彼の手順にポイントを追加する必要があります。

Androidサポートライブラリパッケージを更新する必要があります。ただし、現在持っている場合は、最初にアンインストールしてから、新しいものを取得するために再度インストールする必要があります。

IntellijIdeaをお持ちの場合:

  1. 「ツール/Android/SDKマネージャー」からSDKマネージャーウィンドウを開きます
  2. Exterasフォルダーを見つけて、Androidサポートライブラリを確認します。ステータスがインストールされている場合は、「1つのパッケージを削除...」をクリックして削除します。
  3. このパッケージを確認し、インストールボタンをクリックしてください。
  4. \ extras \ android \ support \ v4に移動し、android-support-v4.jarをコピーして、Libsフォルダーに貼り付けます。
  5. アイデアはプロジェクトを自動的に再コンパイルする必要がありますが、それが行われなかった場合は、[プロジェクトのビルド/再構築]をクリックして手動で再コンパイルする必要があります

それでおしまい ;)

于 2013-07-19T09:06:11.633 に答える
1

まだこれに固執している人にとっては、v4ViewPagerインターフェイスをインポートしない現在のサポートv4の問題です。静的なViewPagerクラスインスタンスは必要ありません。PageTransformerを実装するだけです。PageTransformerインターフェースは、すでにViewPagerでラップされています。

public class ZoomOutPageTransformer implements PageTransformer {

    private static float MIN_SCALE = 0.85f;
    private static float MIN_ALPHA = 0.5f;

    public void transformPage(View view, float position) {
        int pageWidth = view.getWidth();
        int pageHeight = view.getHeight();

        if (position < -1) { // [-Infinity,-1)
            // This page is way off-screen to the left.
            view.setAlpha(0);

        } else if (position <= 1) { // [-1,1]
            // Modify the default slide transition to shrink the page as well
            float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
            float vertMargin = pageHeight * (1 - scaleFactor) / 2;
            float horzMargin = pageWidth * (1 - scaleFactor) / 2;
            if (position < 0) {
                view.setTranslationX(horzMargin - vertMargin / 2);
            } else {
                view.setTranslationX(-horzMargin + vertMargin / 2);
            }

            // Scale the page down (between MIN_SCALE and 1)
            view.setScaleX(scaleFactor);
            view.setScaleY(scaleFactor);

            // Fade the page relative to its size.
            view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE)
                    / (1 - MIN_SCALE) * (1 - MIN_ALPHA));

        } else { // (1,+Infinity]
            // This page is way off-screen to the right.
            view.setAlpha(0);
        }
    }
}
于 2015-03-08T03:19:09.893 に答える
0

android support v4ライブラリを更新した後、Eclipseからプロジェクトを削除できます。そして、プロジェクトを再度インポートします。クリーンビルドを実行してください、すべてが大丈夫です!

于 2013-03-21T02:45:35.483 に答える
0

build.gradleの依存関係コンパイル'com.android.support:support-v13:23.1.1'を追加するだけです(スクリーンショット

于 2016-04-20T19:28:58.510 に答える