android 经典特效 aoyou 首页

package com.example.aoyouanimzkk;

import java.math.BigDecimal;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.text.Html;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.AnimationUtils;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.view.animation.Animation.AnimationListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;

public class MainActivity extends Activity {
	private RelativeLayout activityAnimaLayout;
	private ImageView acitivityImage;
	private TextView activityTitle;
	private TextView thursdayGroupTitle;
	private TextView thursdayGroupDesc;
	private LinearLayout layoutButtonGroup;
	private AnimationDrawable anim;
	private AnimationSet totalAnima;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		layoutButtonGroup = (LinearLayout) findViewById(R.id.layout_btn_group);
		layoutButtonGroup.setVisibility(View.INVISIBLE);
		int backgroundHeight = 102;
		int imgBaseSize = 45; // 图片的基本宽度
		activityAnimaLayout = (RelativeLayout) findViewById(R.id.layout_activity_anima);
		acitivityImage = new ImageView(this);
		acitivityImage.setBackgroundResource(R.drawable.activity_anim);
		LayoutParams imgParam = new LayoutParams(getMinScaleValue(imgBaseSize),
				getMinScaleValue(imgBaseSize));
		int screenWidth = getWindowManager().getDefaultDisplay().getWidth();// 720
		int margin = getScaleValue(10);// 22
		// 屏幕的宽度 减去 左右2个margin 就是实际的宽度 除以三 是每个条目的宽度 除以2 是 leftBaseline 112 这个数值
		// 是这个item(RelativeLayout 的一半宽度)
		int leftBaseline = new BigDecimal(screenWidth - margin * 2)
				.divide(new BigDecimal(3), BigDecimal.ROUND_DOWN)
				.divide(new BigDecimal(2), BigDecimal.ROUND_DOWN).intValue();
		// leftBaseline 减去 图片宽度的2分之1,就是图片距离左边的宽度 67
		int imgLeftMargin = new BigDecimal(leftBaseline).subtract(
				new BigDecimal(getMinScaleValue(imgBaseSize)).divide(
						new BigDecimal(2), BigDecimal.ROUND_DOWN)).intValue();
		int topMargin = getScaleValue(16);// 36
		imgParam.setMargins(imgLeftMargin, topMargin, 0, 0);
		activityTitle = new TextView(this);
		activityTitle.setText(getResources().getString(
				R.string.common_discount_and_promotion));
		activityTitle.setTextAppearance(this, R.style.common_white_font_xl);
		RelativeLayout.LayoutParams titleParam = new RelativeLayout.LayoutParams(
				-2, -2);
		int titleLeftMargin = new BigDecimal(leftBaseline).subtract(
				new BigDecimal(getMinScaleValue(22))).intValue();
		titleParam.setMargins(titleLeftMargin, topMargin
				+ getMinScaleValue(imgBaseSize) + getMinScaleValue(3), 0, 0);
		final String groupActivityTitle = "低至6元门票,疯抢ing";
		thursdayGroupTitle = new TextView(this);
		thursdayGroupTitle.setText(groupActivityTitle);
		thursdayGroupTitle.setTextAppearance(this, R.style.common_white_font_m);

		RelativeLayout.LayoutParams groupInfoParam = new RelativeLayout.LayoutParams(
				-2, -2);
		int groupInfoLeftMargin = new BigDecimal(screenWidth - margin * 2)
				.multiply(new BigDecimal(0.43))
				.setScale(0, BigDecimal.ROUND_DOWN).intValue();
		int groupInfoTopMargin = new BigDecimal(
				getMinScaleValue(backgroundHeight)).divide(new BigDecimal(2),
				BigDecimal.ROUND_DOWN).intValue()
				- getMinScaleValue(7);
		groupInfoParam
				.setMargins(groupInfoLeftMargin, groupInfoTopMargin, 0, 0);

		RelativeLayout journeyGroup = new RelativeLayout(this);
		RelativeLayout.LayoutParams journeyGroupParam = new RelativeLayout.LayoutParams(
				-2, -2);
		int journeyTopMargin = groupInfoTopMargin + getMinScaleValue(20);
		journeyGroupParam.setMargins(groupInfoLeftMargin, journeyTopMargin, 0,
				0);

		LinearLayout thursdayGroupDescLayout = new LinearLayout(this);
		thursdayGroupDescLayout.setOrientation(LinearLayout.HORIZONTAL);
		LinearLayout.LayoutParams thursdayGroupDescLayoutParam = new LinearLayout.LayoutParams(
				-2, -2);

		thursdayGroupDesc = new TextView(this);
		thursdayGroupDesc.setText(Html.fromHtml("低至6元门票,疯抢ith"));
		thursdayGroupDesc.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);

		thursdayGroupDescLayout.addView(thursdayGroupDesc);
		journeyGroup.addView(thursdayGroupDescLayout,
				thursdayGroupDescLayoutParam);

		activityAnimaLayout.addView(acitivityImage, imgParam);
		activityAnimaLayout.addView(activityTitle, titleParam);
		activityAnimaLayout.addView(thursdayGroupTitle, groupInfoParam);
		activityAnimaLayout.addView(journeyGroup, journeyGroupParam);
		anim = (AnimationDrawable) acitivityImage.getBackground();

		int imgAnimaGap = 2000;// 间隙
		int imgFillTime = 40 * 30;// 填充
		int imgFlickerTime = 8 * 50;// 闪烁
		int totalOffsetTime = imgAnimaGap + imgFillTime;
		int imgAnimaOffset = imgAnimaGap + imgFillTime + imgFlickerTime;
		int imgAnimaZoonTime = 1 * 1000;// 动,发育的个体
		int imgAnimaZoonKeepTime = 3 * 1000;// 保持时间
		float originalZoom = 1.0f;
		float zoomIn = 1.25f;
		float zoomOut = 0.8f;
		// 72
		int flyPosX = new BigDecimal(screenWidth - margin * 2)
				.multiply(new BigDecimal(0.43)).multiply(new BigDecimal(0.25))
				.setScale(0, BigDecimal.ROUND_DOWN).intValue();
		int flyPosY = getScaleValue(5);// 11
		AnimationSet imgAnimaSet = new AnimationSet(true);
		ScaleAnimation imgZoomInAnima = new ScaleAnimation(originalZoom,
				zoomIn, originalZoom, zoomIn);
		imgZoomInAnima.setDuration(imgAnimaZoonTime);

		TranslateAnimation imgFlyUp = new TranslateAnimation(0, flyPosX, 0,
				flyPosY);
		imgFlyUp.setDuration(imgAnimaZoonTime);

		ScaleAnimation imgZoomKeepAnima = new ScaleAnimation(originalZoom,
				originalZoom, originalZoom, originalZoom);
		imgZoomKeepAnima.setDuration(imgAnimaZoonKeepTime);
		imgZoomKeepAnima.setStartOffset(imgAnimaZoonTime);

		ScaleAnimation imgZoomOutAnima = new ScaleAnimation(originalZoom,
				zoomOut, originalZoom, zoomOut);
		imgZoomOutAnima.setDuration(imgAnimaZoonTime);
		imgZoomOutAnima.setStartOffset(imgAnimaZoonTime + imgAnimaZoonKeepTime);

		TranslateAnimation imgFlyDown = new TranslateAnimation(0, flyPosX * -1,
				0, flyPosY * -1);
		imgFlyDown.setDuration(imgAnimaZoonTime);
		imgFlyDown.setStartOffset(imgAnimaZoonTime + imgAnimaZoonKeepTime);

		imgAnimaSet.addAnimation(imgFlyUp);
		imgAnimaSet.addAnimation(imgZoomInAnima);
		imgAnimaSet.addAnimation(imgZoomKeepAnima);
		imgAnimaSet.addAnimation(imgZoomOutAnima);
		imgAnimaSet.addAnimation(imgFlyDown);

		imgAnimaSet.setStartOffset(imgAnimaOffset);
		imgAnimaSet.setFillAfter(true);
		// ================================
		// 132
		int titleOriginalPosY = topMargin + getMinScaleValue(imgBaseSize)
				+ getMinScaleValue(3);
		// 222
		int titleFlyUpPosX = groupInfoLeftMargin - titleLeftMargin;
		// -96
		int titleFlyUpPosY = groupInfoTopMargin - getMinScaleValue(26)
				- titleOriginalPosY;
		int titleOffset = totalOffsetTime;
		int titleFlyUpTime = imgFlickerTime;
		int titleFlyDownTime = 1 * 1000;
		int titleKeepTime = 4 * 1000;

		AnimationSet titleAnimaSet = new AnimationSet(true);
		TranslateAnimation titleFlyUp = new TranslateAnimation(
				Animation.ABSOLUTE, 0, Animation.ABSOLUTE, titleFlyUpPosX,
				Animation.ABSOLUTE, 0, Animation.ABSOLUTE, titleFlyUpPosY);
		titleFlyUp.setDuration(titleFlyUpTime);

		TranslateAnimation titleKeep = new TranslateAnimation(0, 0, 0, 0);
		titleKeep.setDuration(titleKeepTime);
		titleKeep.setStartOffset(titleFlyUpTime);

		TranslateAnimation titleFlyDown = new TranslateAnimation(
				Animation.ABSOLUTE, 0, Animation.ABSOLUTE, titleFlyUpPosX * -1,
				Animation.ABSOLUTE, 0, Animation.ABSOLUTE, titleFlyUpPosY * -1);
		titleFlyDown.setDuration(titleFlyDownTime);
		titleFlyDown.setStartOffset(titleFlyUpTime + titleKeepTime);

		titleAnimaSet.addAnimation(titleFlyUp);
		titleAnimaSet.addAnimation(titleKeep);
		titleAnimaSet.addAnimation(titleFlyDown);

		// ====================================抢优惠的动画
		// 541
		int flyInPos = new BigDecimal(screenWidth - margin * 2).intValue()
				- new BigDecimal(getScaleValue(300))
						.multiply(new BigDecimal(0.2))
						.setScale(0, BigDecimal.ROUND_DOWN).intValue();
		int firstOffsetTime = imgAnimaOffset + imgAnimaZoonTime;
		int secondOffsetTime = 2 * 100;
		int inTime = 1500;
		int keepTime = 1700;
		int outTime = 800;
		int timeGap = secondOffsetTime * 2;
		AnimationSet textGroupAnimaSet = new AnimationSet(true);
		TranslateAnimation firstFlyIn = new TranslateAnimation(flyInPos, 0, 0,
				0);
		firstFlyIn.setDuration(inTime);

		AlphaAnimation firstShowAlpha = new AlphaAnimation(0, 1);
		firstShowAlpha.setDuration(inTime);

		TranslateAnimation firstKeepPosition = new TranslateAnimation(0, 0, 0,
				0);
		firstKeepPosition.setDuration(keepTime);
		firstKeepPosition.setStartOffset(inTime);

		TranslateAnimation firstFlyOut = new TranslateAnimation(0, flyInPos, 0,
				0);
		firstFlyOut.setDuration(outTime);
		firstFlyOut.setStartOffset(inTime + keepTime);

		AlphaAnimation firstHideAlpha = new AlphaAnimation(1, 0);
		firstHideAlpha.setDuration(outTime);
		firstHideAlpha.setStartOffset(inTime + keepTime);

		textGroupAnimaSet.addAnimation(firstHideAlpha);
		textGroupAnimaSet.addAnimation(firstKeepPosition);
		textGroupAnimaSet.addAnimation(firstFlyIn);
		textGroupAnimaSet.addAnimation(firstFlyOut);
		textGroupAnimaSet.addAnimation(firstShowAlpha);
		textGroupAnimaSet.setFillAfter(true);
		textGroupAnimaSet.setStartOffset(firstOffsetTime);

		AnimationSet journeyGroupAnimaSet = new AnimationSet(true);
		TranslateAnimation secondFlyIn = new TranslateAnimation(flyInPos, 0, 0,
				0);
		secondFlyIn.setDuration(inTime);

		final AlphaAnimation secondShowAlpha = new AlphaAnimation(0, 1);
		secondShowAlpha.setDuration(inTime);

		TranslateAnimation secondKeepPosition = new TranslateAnimation(0, 0, 0, 0);
		secondKeepPosition.setDuration(keepTime - timeGap);
		secondKeepPosition.setStartOffset(inTime);
		
		AlphaAnimation secondKeepAlpha = new AlphaAnimation(1, 1);
		secondKeepAlpha.setDuration(keepTime - timeGap);
		secondKeepAlpha.setStartOffset(inTime);
		
		TranslateAnimation secondFlyOut = new TranslateAnimation(0, flyInPos, 0, 0);
		secondFlyOut.setDuration(outTime + secondOffsetTime);
		secondFlyOut.setStartOffset(inTime + keepTime - timeGap);
		
		AlphaAnimation secondHideAlpha = new AlphaAnimation(1, 0);
		secondHideAlpha.setDuration(outTime + secondOffsetTime);
		secondHideAlpha.setStartOffset(inTime + keepTime - timeGap);
		
		journeyGroupAnimaSet.addAnimation(secondFlyIn);
		journeyGroupAnimaSet.addAnimation(secondShowAlpha);
		journeyGroupAnimaSet.addAnimation(secondKeepPosition);
		journeyGroupAnimaSet.addAnimation(secondKeepAlpha);
		journeyGroupAnimaSet.addAnimation(secondFlyOut);
		journeyGroupAnimaSet.addAnimation(secondHideAlpha);
		
		journeyGroupAnimaSet.setFillAfter(true);
		journeyGroupAnimaSet.setStartOffset(firstOffsetTime + secondOffsetTime);
		journeyGroupAnimaSet.setAnimationListener(new AnimationListener() {

			@Override
			public void onAnimationStart(Animation animation) {
				Log.i("zhouke", "start animation");
				thursdayGroupDesc.setText(Html.fromHtml(groupActivityTitle
						+ "th."));
			}

			@Override
			public void onAnimationRepeat(Animation animation) {

			}

			@Override
			public void onAnimationEnd(Animation animation) {
				hideAnima();
				Log.i("zhouke", "end animation..");
			}
		});

		journeyGroup.setAnimation(journeyGroupAnimaSet);
		thursdayGroupTitle.setAnimation(textGroupAnimaSet);
		activityTitle.setAnimation(titleAnimaSet);
		acitivityImage.setAnimation(imgAnimaSet);

		totalAnima = new AnimationSet(true);

		titleAnimaSet.setFillAfter(true);
		titleAnimaSet.setStartOffset(titleOffset);

		totalAnima.addAnimation(imgAnimaSet);
		totalAnima.addAnimation(titleAnimaSet);
		totalAnima.addAnimation(textGroupAnimaSet);
		totalAnima.addAnimation(journeyGroupAnimaSet);

		/*
		 * titleAnimaSet.startNow(); imgAnimaSet.startNow();
		 * textGroupAnimaSet.startNow(); journeyGroupAnimaSet.startNow();
		 */
		anim.start();
		totalAnima.startNow();
	}

	public void hideAnima() {
		Animation hideAnimation = AnimationUtils.loadAnimation(this,
				R.anim.home_hide_btn);
		hideAnimation.setAnimationListener(new AnimationListener() {

			@Override
			public void onAnimationStart(Animation animation) {
			}

			@Override
			public void onAnimationRepeat(Animation animation) {
			}

			@Override
			public void onAnimationEnd(Animation animation) {
				Animation showAnimation = AnimationUtils.loadAnimation(
						MainActivity.this, R.anim.home_show_btn);
				layoutButtonGroup.startAnimation(showAnimation);
				Log.i("zhouke", "end.d..." + Thread.currentThread().getName());
				layoutButtonGroup.setVisibility(View.VISIBLE);

			}
		});
		anim.stop();
		activityAnimaLayout.startAnimation(hideAnimation);
		new Thread(new Runnable() {

			@Override
			public void run() {
				try {
					synchronized (this) {
						this.wait(10 * 1000);
					}
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				handler.sendEmptyMessage(0);
			}
		}).start();
	}

	@SuppressLint("HandlerLeak")
	private Handler handler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			showAnima();
		};
	};

	private void showAnima() {
		Animation hideAnimation = AnimationUtils.loadAnimation(this,
				R.anim.home_hide_btn);
		hideAnimation.setAnimationListener(new AnimationListener() {

			@Override
			public void onAnimationStart(Animation animation) {
			}

			@Override
			public void onAnimationRepeat(Animation animation) {
			}

			@Override
			public void onAnimationEnd(Animation animation) {
				Animation showAnimation = AnimationUtils.loadAnimation(
						MainActivity.this, R.anim.home_show_btn);
				activityAnimaLayout.startAnimation(showAnimation);
				activityAnimaLayout.setVisibility(View.VISIBLE);
			}
		});
		Log.i("zhouke", "showAnima..");
		layoutButtonGroup.startAnimation(hideAnimation);
		anim.start();
		totalAnima.startNow();
		layoutButtonGroup.setVisibility(View.INVISIBLE);
	}

	@SuppressWarnings("deprecation")
	protected int getMinScaleValue(int originalValue) {
		int value = 0;
		BigDecimal sacle = new BigDecimal(originalValue);
		BigDecimal sacleChange = null;
		switch (this.getWindowManager().getDefaultDisplay().getWidth()) {
		case 320:
			sacleChange = new BigDecimal(1);
			break;
		case 480:
			sacleChange = new BigDecimal(1.5);
			break;
		case 640:
			sacleChange = new BigDecimal(2);
			break;
		case 720:
			sacleChange = new BigDecimal(2);
			break;
		case 1080:
			sacleChange = new BigDecimal(3);
			break;
		default:
			sacleChange = new BigDecimal(this.getWindowManager()
					.getDefaultDisplay().getWidth() / 320);
		}
		sacle = sacle.multiply(sacleChange).setScale(0, BigDecimal.ROUND_DOWN);
		value = sacle.intValue();
		return value;
	}

	@SuppressWarnings("deprecation")
	protected int getScaleValue(int originalValue) {
		int value = 0;
		BigDecimal sacle = new BigDecimal(originalValue);
		BigDecimal sacleChange = null;
		switch (this.getWindowManager().getDefaultDisplay().getWidth()) {
		case 320:
			sacleChange = new BigDecimal(Constants.MDPI_SCALE_CHANGE);
			break;
		case 480:
			sacleChange = new BigDecimal(Constants.HDPI_SCALE_CHANGE);
			break;
		case 640:
			sacleChange = new BigDecimal(Constants.HDPI_SCALE_CHANGE);
			break;
		case 720:
			sacleChange = new BigDecimal(Constants.XHDPI_SCALE_CHANGE);
			break;
		case 1080:
			sacleChange = new BigDecimal(Constants.XXHDPI_SCALE_CHANGE);
			break;
		default:
			sacleChange = new BigDecimal(this.getWindowManager()
					.getDefaultDisplay().getWidth() / 320);
		}
		sacle = sacle.multiply(sacleChange).setScale(0, BigDecimal.ROUND_DOWN);
		value = sacle.intValue();
		return value;
	}

}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="102dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp" >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/index_product_bg" >
        </RelativeLayout>

        <LinearLayout
            android:id="@+id/layout_btn_group"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:baselineAligned="false" >

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1" >

                <Button
                    android:id="@+id/index_activity_btn"
                    android:layout_width="64dp"
                    android:layout_height="96dp"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true"
                    android:background="@drawable/btn_index_activity_selector"
                    android:onClick="gotoDiscount" />
            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1" >

                <Button
                    android:id="@+id/index_shake_btn"
                    android:layout_width="64dp"
                    android:layout_height="96dp"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true"
                    android:background="@drawable/btn_index_shake_selector"
                    android:onClick="gotoShake" />
            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1" >

                <Button
                    android:id="@+id/index_map_btn"
                    android:layout_width="64dp"
                    android:layout_height="96dp"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true"
                    android:background="@drawable/btn_index_map_selector"
                    android:onClick="gotoMap" />
            </RelativeLayout>
        </LinearLayout>

        <RelativeLayout
            android:id="@+id/layout_activity_anima"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        </RelativeLayout>
    </FrameLayout>

</RelativeLayout>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值