2

オーバーラップする 3 つのスクロール ビューがあります。何らかの理由で、他の 2 つを View.Gone に設定し、1 つのスクロール ビューを View.Visible に設定してからアニメーションを開始すると、トリガーされません。これらのスクロール ビューはフラグメント内にあります。一部の機能がフラグメント内で完全に機能しないことはわかっています。ただし、アニメーションはかなり基本的なようです。

これが私のボタンリスナーのメソッドです。

        sv2.setVisibility(View.GONE);
        sv3.setVisibility(View.GONE);
        sv1.setVisibility(View.VISIBLE);
        Animation fadeInAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.fade_in_scollview);
        //set your animation
        sv1.startAnimation(fadeInAnimation);

また、非表示に設定し、アニメーションをロードしてから、表示しようとしました。

        sv1.setVisibility(View.INVISIBLE);
        Animation fadeInAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.fade_in_scollview);  
        //set your animation
        sv1.startAnimation(fadeInAnimation);
        sv1.setVisibility(View.VISIBLE);

これが私のアニメーション xml です。

<?xml version="1.0" encoding="UTF-8"?>
  <set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" 
     android:interpolator="@android:anim/accelerate_interpolator" 
   android:duration="500"
    android:repeatCount="infinite"/>
 </set>
4

3 に答える 3

1

フラグメントでアニメーションを使用するには、以下のコードを試してください

これは私のレイアウトファイルです

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/iv_banner"
        android:layout_width="fill_parent"
        android:layout_height="250dp"
        android:layout_gravity="center_horizontal" />
</LinearLayout>

これは私のフラグメントJavaクラスです

    public class Fragment_Home extends Fragment {
    public int currentimageindex = 0;
    Handler mHandler = new Handler();
    Runnable mUpdateResults;

    //Array of drawable images
    private int[] IMAGE_IDS = {
            R.drawable.home_slider_stemer, R.drawable.home_slider_plane
    };

    //image view
    private ImageView iv_banner;
    private View rootView;

    public Fragment_Home() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        rootView = inflater.inflate(R.layout.fragment_home, container, false);

        LoadUIElements();



        return rootView;
    }

    private void LoadUIElements() {
        iv_banner = (ImageView) rootView.findViewById(R.id.iv_banner);
        int delay = 1000; // delay for 1 sec.

        int period = 2000; // repeat every 4 sec.
        Timer timer = new Timer();

        timer.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                mHandler.post(mUpdateResults);
            }
        }, delay, period);

        mUpdateResults = new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                try {
                    AnimateandSlideShow();
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        };
    }

    /**
     * Helper method to start the animation on the splash screen
     */
    protected void AnimateandSlideShow() {
        // TODO Auto-generated method stub
        try {
            iv_banner.setImageResource(IMAGE_IDS[currentimageindex
                    % IMAGE_IDS.length]);

            currentimageindex++;
            Animation rotateimage = AnimationUtils.loadAnimation(getActivity()
                    .getBaseContext().getApplicationContext(), R.anim.fade_in);
            iv_banner.startAnimation(rotateimage);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Drawable フォルダーに画像を res に入れることを忘れないでください。

于 2016-06-30T04:22:14.847 に答える
0

アニメーション リスナーを設定し、そこにあるすべての可視性を管理することで、この問題を回避しました。

    sv1.setVisibility(View.INVISIBLE);
    //grab animation from anim folder in res/
    Animation fadeInAnimation = AnimationUtils.loadAnimation(getActivity(), R.anim.push_up_anim);
    fadeInAnimation.setAnimationListener(new AnimationListener() {
          //set other scroll views to invisible once done
          public void onAnimationEnd(Animation animation) {
            sv2.setVisibility(View.INVISIBLE);
            sv3.setVisibility(View.INVISIBLE);
            }

            public void onAnimationRepeat(Animation animation) {
            }
            //once our animation starts, we set our view to visible
            public void onAnimationStart(Animation animation) {
                sv1.setVisibility(View.VISIBLE);
            }
        });
        scrollViewAnimationActive = true;
        //start our animations for views that need to be removed. 
        //We know one of these views were showing by checking if it was "visible".
        if (sv2.getVisibility() == View.VISIBLE)
              sv2.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.pushed_out_anim));
        else if (sv3.getVisibility() == View.VISIBLE) {
              sv3.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.pushed_out_anim));
        }else if (wikiParentLL.getChildCount() > 1) {
                wikiParentLL.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.pushed_out_anim));
            }
//finally, start our "animation"
    sv1.startAnimation(fadeInAnimation);

お役に立てれば。

于 2013-04-02T07:22:23.140 に答える