如何在启动画面中从右向左滑动图像[动画]

时间:2014-06-24 09:45:55

标签: android slider android-animation splash-screen

  • 我不知道如何将图像从右向左滑动 SplashActivity。
  • 下面我发布了SplashActivity的代码。我得到了一个输出。但是图像 没有滑动。它只是一个接一个地显示图像。

SplashActivity.java:

public class SplashActivity extends FragmentActivity {

    // create object of progressbar
    ProgressBar prgLoading;

    // set variable for progress bar to 0
    int progress = 0;
    private View view;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_splash);

        Animation slide = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_in_left);

        final ImageView splashImageView = (ImageView) findViewById(R.id.splashImageView);

        splashImageView.setBackgroundResource(R.anim.splash);

        final AnimationDrawable frameAnimation = (AnimationDrawable) splashImageView
                .getBackground();

        view.startAnimation(slide);

        Thread timer = new Thread() {
            public void run() {
                try {
                    sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    Intent splash = new Intent(SplashActivity.this,
                            HomeActivity.class);
                    startActivity(splash);
                }
            }
        };

        timer.start();
        splashImageView.post(new Runnable() {

            @Override
            public void run() {
                frameAnimation.start();
            }
        });
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        finish();
    }

}

layout_splash.xml:

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

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_above="@android:id/tabs" >

                <ImageView 
                    android:id="@+id/splashImageView"
                    android:background="@drawable/spl1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />

          </FrameLayout>
    </RelativeLayout>

</LinearLayout>

在res / anim / slide_in_left.xml中:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >
    <translate android:duration="1000" android:fromXDelta="0%" android:toXDelta="-100%"/>
    <alpha android:duration="1000" android:fromAlpha="1.0" android:toAlpha="0.0" />
</set>

在res / anim / splash.xml中:

<?xml version="1.0" encoding="utf-8"?>

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/flaganim"
    android:oneshot="false"
    >

    <item android:drawable="@drawable/spl1" android:duration="2000" />
    <item android:drawable="@drawable/spl2" android:duration="2000" />
    <item android:drawable="@drawable/spl3" android:duration="2000" />

    </animation-list>
  • 我得到一个输出,因为三个图像只是一个接一个地显示。但是 图像不会从右向左滑动。
  • 如果您知道如何解决这些问题,任何人都可以帮助我。谢谢。

4 个答案:

答案 0 :(得分:2)

我删除了代码中所有不必要的部分。另外,我对它进行了一些改进,例如我使用Timer代替Thread.sleep()finish()中奇怪的onPause()可以替换为Intent个标记。我还删除了对动画drawable的调用。通过幻灯片动画,我假设您不再需要它了。

public class SplashActivity extends FragmentActivity {

    private final TimerTask spashScreenFinished = new TimerTask() {
        @Override
        public void run() {
            Intent splash = new Intent(SplashActivity.this, HomeActivity.class);     
            // We set these flags so the user cannot return to the SplashScreen
            splash.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(splash);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_splash);

        // We get the ImageView and set the background. (If possible do this in XML instead of code)
        final ImageView splashImageView = (ImageView) findViewById(R.id.splashImageView);
        splashImageView.setBackgroundResource(R.anim.splash);

        // We load the slide animation and apply it to the ImageView
        Animation slide = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_in_left);
        splashImageView.startAnimation(slide);

        // We use a Timer to schedule a TimerTask for 5 seconds in the future!
        Timer timer = new Timer();
        timer.schedule(this.spashScreenFinished, 5000);
    }
}

另外:不要使用闪屏!它们总是一个设计糟糕的应用程序的标志。如果您的应用需要在启动时加载那么多,那么您做错了。如果它不需要加载任何东西,那么没有理由让用户等待5秒钟。一个好的应用程序应该立即启动并尽快使用。

答案 1 :(得分:1)

您可以使用TranslateAnimation

DisplayMetrics outMetrics = new DisplayMetrics();

getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics);

TranslateAnimation imageAnimation = new TranslateAnimation(outMetrics.widthPixels, 0, 0, 0);
imageAnimation.setDuration(1500);

splashImageView.startAnimation(imageAnimation);

然后,您可以使用TranslateAnimation构造函数中传递的值来获取所需的动画量。

答案 2 :(得分:0)

Android内置动画幻灯片,因此您可以使用它们。

您可以通过执行以下操作来调用它们:

Animation anim = AnimationUtils.loadAnimation(getApplicationContext(), android.R.id.slide_in_right);  

然后你可以这样做:

splashImageView.setAnimation(anim);

然后图像将从右侧滑入。

还有android.R.anim.slide_out_left

以下是slide_in_right.xml的源代码供参考。

如果您愿意,可以将该代码调用到您的项目中并进行实验以获得不同的结果,但请记住在调用时删除android.

答案 3 :(得分:0)

我没有动画方面的工作知识。但是,我有解决方案jus尝试它。设置要在启动画面中显示的左右两侧图像。写一个条件,设置为右侧图像可见几秒钟,然后为左侧图像设置可见几秒钟。它看起来也像你想要实现的动画。简单说明: - )