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>