Android滑动动画,可以用ViewPager或者ViewFlipper实现。

ViewPager自带触摸滑动功能,结合Fragment使用很好,来自补充组件android-support-v4.jar;

ViewFlipper要借助GestureDetector来实现手势滑动,是系统自带组件。

下面是用ViewFlipper实现的图片滑动动画,没有手势滑动功能,activity_main.xml:

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/centerPoint"
        android:text="center"
        android:gravity="center"
        android:layout_centerInParent="true"/>

    <ImageView
        android:layout_width="138dp"
        android:layout_height="39dp"
        android:src="@drawable/loading"
        android:id="@+id/loading"
        android:layout_above="@+id/centerPoint"
        android:layout_alignLeft="@id/centerPoint"
        android:layout_marginBottom="90dp"/>

    <ImageView
        android:layout_width="142dp"
        android:layout_height="113dp"
        android:id="@+id/pet"
        android:layout_toLeftOf="@id/loading"
        android:layout_alignTop="@id/loading"
        android:layout_marginTop="-35dp"
        android:layout_marginRight="-6dp"
        android:src="@drawable/pet"/>

    <ImageView
        android:layout_width="18dp"
        android:layout_height="20dp"
        android:id="@+id/zz"
        android:background="@drawable/zz"
        android:layout_alignRight="@id/pet"
        android:layout_alignTop="@id/pet"
        android:layout_marginRight="30dp"
        android:layout_marginTop="5dp"/>

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/bg"
        android:background="@drawable/bg"
        android:layout_alignTop="@id/loading"
        android:layout_marginTop="50dp"/>

    <ViewFlipper
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/flipper"
        android:layout_alignTop="@id/loading"
        android:layout_marginTop="56dp"/>

</RelativeLayout>

在创建滑动动画前,还需要播放一小段mp4视频作为Logo,这里使用android的VideoView完成。

除了layout中的activity_main.xml资源文件,我们把logo.mp4文件和一些用于滑动动画的图片放入drawable目录下。

package com.example.mytest;

import java.util.Random;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewParent;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.VideoView;
import android.widget.ViewFlipper;

public class MainActivity extends Activity implements OnCompletionListener, OnPreparedListener {

    private static MainActivity m_Activity;
    private VideoView m_videoView;
    private RelativeLayout m_rootLayout;
    private boolean m_logoFinished;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        m_Activity = this;
        m_Activity.runOnUiThread(new VideoSplashTask());

        LayoutInflater inflater = LayoutInflater.from(m_Activity);
        m_rootLayout = (RelativeLayout)inflater.inflate(R.layout.activity_main, null);
        PrepareForStartLogo();
    }

    private class VideoSplashTask implements Runnable {

        @Override
        public void run() {
            m_videoView = new VideoView((Context)m_Activity);
            m_videoView.setOnCompletionListener(MainActivity.m_Activity);
            m_videoView.setOnPreparedListener(MainActivity.m_Activity);

            Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.drawable.logo);
            m_videoView.setVideoURI(uri);
            LinearLayout ll = new LinearLayout(MainActivity.m_Activity);
            ll.setGravity(Gravity.CENTER);
            ll.setOrientation(LinearLayout.VERTICAL);
            ll.setBackgroundColor(Color.WHITE);
            ll.addView(m_videoView);
            m_Activity.addContentView(ll, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

            m_videoView.setZOrderOnTop(true);
            m_videoView.requestFocus();
            m_videoView.start();
        }
    }

    @Override
    public void onCompletion(MediaPlayer arg0) {
        ViewParent layout = m_videoView.getParent();
        ((ViewGroup)layout.getParent()).removeView((View)layout);
        m_videoView = null;
        m_Activity.runOnUiThread(m_UiThreadStartLogo);

        // destroy splash screen by view
        m_rootLayout.postDelayed(m_UiThreadStopLogo, 3000);
    }

    @Override
    public void onPrepared(MediaPlayer player) {
        int width = player.getVideoWidth();
        int height = player.getVideoHeight();
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        int screenWidth = dm.widthPixels;;
        int screenHeight = dm.heightPixels;

        // fill screen with the video
        float scale = Math.max((float)screenWidth / width, (float)screenHeight / height);
        LayoutParams lp = m_videoView.getLayoutParams();
        lp.width = (int)Math.ceil(scale * width);
        lp.height = (int)Math.ceil(scale * height);
        m_videoView.setLayoutParams(lp);

        m_videoView.start();
    }

    private void PrepareForStartLogo()
    {
        ViewFlipper mFlipper = (ViewFlipper)m_rootLayout.findViewById(R.id.flipper);
        int[] imgResId = new int[] {R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e };
        for (int i = 0; i < imgResId.length; i++){
            ImageView imageView = new ImageView(m_Activity);
            imageView.setImageResource(imgResId[i]);
            mFlipper.addView(imageView);
        }
        mFlipper.setDisplayedChild(new Random().nextInt(imgResId.length));

        // viewFlipper animation
        AnimationSet mFlipper_animSet_in = new AnimationSet(true);
        TranslateAnimation mFlipper_animIn_t = new TranslateAnimation(
                TranslateAnimation.RELATIVE_TO_SELF, 1f,
                TranslateAnimation.RELATIVE_TO_SELF, 0f,
                TranslateAnimation.RELATIVE_TO_SELF, 0f,
                TranslateAnimation.RELATIVE_TO_SELF, 0f);
        mFlipper_animIn_t.setDuration(300);
        mFlipper_animSet_in.addAnimation(mFlipper_animIn_t);

        AnimationSet mFlipper_animSet_out = new AnimationSet(true);
        TranslateAnimation mFlipper_animOut_t = new TranslateAnimation(
                TranslateAnimation.RELATIVE_TO_SELF, 0f,
                TranslateAnimation.RELATIVE_TO_SELF, -1f,
                TranslateAnimation.RELATIVE_TO_SELF, 0f,
                TranslateAnimation.RELATIVE_TO_SELF, 0f);
        mFlipper_animOut_t.setDuration(300);
        mFlipper_animSet_out.addAnimation(mFlipper_animOut_t);

        mFlipper.setInAnimation(mFlipper_animSet_in);
        mFlipper.setOutAnimation(mFlipper_animSet_out);
        mFlipper.setFlipInterval(4000);
        mFlipper.startFlipping();

        // image zz animation
        final int animDuration = 1600;

        TranslateAnimation mZZ_anim_translate = new TranslateAnimation(
                TranslateAnimation.RELATIVE_TO_SELF, 0f,
                TranslateAnimation.RELATIVE_TO_SELF, 1.8f,
                TranslateAnimation.RELATIVE_TO_SELF, 0f,
                TranslateAnimation.RELATIVE_TO_SELF, -1f);
        mZZ_anim_translate.setDuration(animDuration);
        mZZ_anim_translate.setInterpolator(new DecelerateInterpolator());
        mZZ_anim_translate.setRepeatMode(Animation.RESTART);
        mZZ_anim_translate.setRepeatCount(Integer.MAX_VALUE);

        ScaleAnimation mZZ_anim_scale = new ScaleAnimation(1, 2, 1, 2,
                Animation.RELATIVE_TO_SELF, 1f,
                Animation.RELATIVE_TO_SELF, 1f);
        mZZ_anim_scale.setDuration(animDuration);
        mZZ_anim_scale.setInterpolator(new DecelerateInterpolator());
        mZZ_anim_scale.setRepeatMode(Animation.RESTART);
        mZZ_anim_scale.setRepeatCount(Integer.MAX_VALUE);

        AlphaAnimation mZZ_anim_alpha = new AlphaAnimation(1, 0);
        mZZ_anim_alpha.setDuration(animDuration);
        mZZ_anim_alpha.setInterpolator(new DecelerateInterpolator());
        mZZ_anim_alpha.setRepeatMode(Animation.RESTART);
        mZZ_anim_alpha.setRepeatCount(Integer.MAX_VALUE);

        AnimationSet mZZ_animSet = new AnimationSet(true);
        mZZ_animSet.addAnimation(mZZ_anim_translate);
        mZZ_animSet.addAnimation(mZZ_anim_scale);
        mZZ_animSet.addAnimation(mZZ_anim_alpha);

        ImageView zzImg = (ImageView)m_rootLayout.findViewById(R.id.zz);
        zzImg.startAnimation(mZZ_animSet);
    }

    private final Runnable m_UiThreadStartLogo = new Runnable() {
        public void run() {
            m_Activity.addContentView(m_rootLayout, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        }
    };

    private final Runnable m_UiThreadStopLogo = new Runnable() {
        public void run() {
            m_rootLayout.clearAnimation();
            ViewGroup vg = (ViewGroup) (m_rootLayout.getParent());
            vg.removeView(m_rootLayout);
            m_rootLayout = null;

            // add text view
            TextView text = new TextView(m_Activity);
            text.setText("End");
            text.setGravity(Gravity.CENTER);
            m_Activity.addContentView(text, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

            m_logoFinished = true;
        }
    };

    @Override
    public void onBackPressed() {
        AlertDialog.Builder builder = new AlertDialog.Builder(m_Activity);
        builder.setMessage("确定退出吗?");
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                m_Activity.finish();
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });

        if (m_logoFinished){
            builder.show();
        }
    };

    @Override
    protected void onResume() {
        super.onResume();
        if (m_videoView != null) {
            m_videoView.resume();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (m_videoView != null) {
            m_videoView.pause();
        }
    }
}

Android滑动动画ViewFlipper和视频播放VideoView的使用的更多相关文章

  1. Android 滑动效果入门篇(一)—— ViewFlipper

    ViewFilpper 是Android官方提供的一个View容器类,继承于ViewAnimator类,用于实现页面切换,也可以设定时间间隔,让它自动播放.又ViewAnimator继承至于Frame ...

  2. Android 实现左右滑动效果ViewFlipper终结【转】

    本示例演示在Android中实现图片左右滑动效果.   关于滑动效果,在Android中用得比较多,本示例实现的滑动效果是使用ViewFlipper来实现的,当然也可以使用其它的View来实现.接下来 ...

  3. Android的Activity屏幕切换滑动动画

    Activity的切换效果使用的是Android的动画效果,Android的动画在官方有相关资料:http://developer.android.com/guide/topics/graphics/ ...

  4. android仿微信红包动画、Kotlin综合应用、Xposed模块、炫酷下拉视觉、UC浏览器滑动动画等源码

    Android精选源码 仿微信打开红包旋转动画 使用Kotlin编写的Android应用,内容你想象不到 Android手机上的免Root Android系统日志Viewer 一个能让微信 Mater ...

  5. Android Animation动画实战(一): 从布局动画引入ListView滑动时,每一Item项的显示动画

    前言: 之前,我已经写了两篇博文,给大家介绍了Android的基础动画是如何实现的,如果还不清楚的,可以点击查看:Android Animation动画详解(一): 补间动画 及 Android An ...

  6. Android中使用ViewFlipper实现屏幕页面切换(关于坐标轴的问题已补充更改)

    屏幕切换指的是在同一个Activity内屏幕间的切换,ViewFlipper继承了Framelayout类,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果.如 ...

  7. 十六、Android 滑动效果汇总

    Android 滑动效果入门篇(一)—— ViewFlipper Android 滑动效果入门篇(二)—— Gallery Android 滑动效果基础篇(三)—— Gallery仿图像集浏览 And ...

  8. Android 滑动效果汇总

    Android 滑动效果入门篇(一)—— ViewFlipper Android 滑动效果入门篇(二)—— Gallery Android 滑动效果基础篇(三)—— Gallery仿图像集浏览 And ...

  9. Xamarin.Android之动画

    Translate动画 这个动画是最常使用到的,主要就是将控件从一个位置移动到另一个位置,并且还可以在这其中增加一定的效果,下面我们将采用两种方式实现动画,首选的是利用XML来制作动画,其次就是利用代 ...

随机推荐

  1. CF 366E Dima and Magic Guitar(最远哈密顿距离)

    题目链接:http://codeforces.com/problemset/problem/366/E 题意:给出一个n*m的数字矩阵A,每个矩阵元素的范围[1,K].给出一个长度为s的数字串B,B的 ...

  2. Linux改IP后务必重启网络服务

    [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0BOOTPROTO=noneONBOOT=yes ...

  3. java怎样读取数据库表中字段的数据类型?

    用DriverManager.getConnection()得到connect, 用connect.getMetaData()得到 DatabaseMetaData, 用 DatabaseMetaDa ...

  4. UVa 1640 (计数) The Counting Problem

    题意: 统计[a, b]或[b, a]中0~9这些数字各出现多少次. 分析: 这道题可以和UVa 11361比较来看. 同样是利用这样一个“模板”,进行区间的分块,加速运算. 因为这里没有前导0,所以 ...

  5. [POJ 3498] March of the Penguins

    March of the Penguins Time Limit: 8000MS   Memory Limit: 65536K Total Submissions: 4378   Accepted:  ...

  6. [转] Jquery滚动加载

    原文地址:http://hi.baidu.com/vipxiaofan/item/9eb927b795671f77254b0985 另外一个asp.net的例子:http://blog.csdn.ne ...

  7. fastdfs-client-java 文件上传

    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线服务,如相 ...

  8. windows配置jdk

    一.JDK1.6下载 目前JDK最新版本是JDK1.6,到http://java.sun.com/javase/downloads/index.jsp可以下载JDK1.6. 二.JDK1.6安装 JD ...

  9. wpa_cli调试工具的使用

    1: run wpa_supplicant first use the following command: wpa_supplicant -Dwext -iwlan0 -C/data/system/ ...

  10. 关于WCF中间层服务器端DTO属性更新如何同步回仓储实体的处理方式

    中间层建立上下文录制对象及录制属性.如下范例: public bool CancelChangeEvent(ClientContext context, Dbs dbs, int encounterI ...