android 4.0动画

来源:互联网 发布:csgo 性能数据 编辑:程序博客网 时间:2024/05/16 17:35
没事弄了个4.0的动画,有需要的可以看看。 package com.tfs.myanim.flycat;import com.tfs.myanim.flycat.R;import android.app.Activity;import android.app.Service;import android.content.ActivityNotFoundException;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.PixelFormat;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.os.Handler;import android.os.Vibrator;import android.util.DisplayMetrics;import android.view.MotionEvent;import android.view.View;import android.view.ViewConfiguration;import android.widget.ImageView;import android.widget.Toast;public class PlatLogoActivity extends Activity{Toast mToast;ImageView mContent;Bitmap mBmp;int mCount;final Handler mHandler = new Handler();private Vibrator mVibrator01;Runnable mSuperLongPress = new Runnable(){public void run(){mCount++;final float scale = 1f + 0.25f * mCount * mCount;Matrix m = mContent.getImageMatrix();DisplayMetrics mDM = getResources().getDisplayMetrics();m.postScale(scale, scale, mDM.widthPixels / 2, mDM.heightPixels / 2);mContent.setImageMatrix(m);mContent.invalidate();DLog.d("count = " + mCount);if (mCount < 3){mVibrator01 = (Vibrator) getApplication().getSystemService(Service.VIBRATOR_SERVICE);mVibrator01.vibrate(200);mHandler.postDelayed(mSuperLongPress,ViewConfiguration.getLongPressTimeout());}else{try{startActivity(new Intent(Intent.ACTION_MAIN).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS).setClassName(PlatLogoActivity.this,com.tfs.myanim.flycat.MainActivity.class.getName()));}catch (ActivityNotFoundException ex){android.util.Log.e("PlatLogoActivity","Couldn't find platlogo screensaver.");}finish();}}};@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);mToast = Toast.makeText(this, "西子Love护士",Toast.LENGTH_SHORT);mContent = new ImageView(this);// mContent.setBackgroundColor(0x55FF0000);mContent.setBackgroundDrawable(new BitmapDrawable(drawableToBitmap(this.getWallpaper())));mContent.setImageResource(R.drawable.platlog);mContent.setScaleType(ImageView.ScaleType.CENTER_INSIDE);mToast.show();mContent.setOnTouchListener(new View.OnTouchListener(){@Overridepublic boolean onTouch(View v, MotionEvent event){final int action = event.getAction();if (action == MotionEvent.ACTION_DOWN){mContent.setPressed(true);mHandler.removeCallbacks(mSuperLongPress);mCount = 0;mHandler.postDelayed(mSuperLongPress,2 * ViewConfiguration.getLongPressTimeout());}else if (action == MotionEvent.ACTION_UP){if (mContent.isPressed()){mContent.setPressed(false);mHandler.removeCallbacks(mSuperLongPress);mToast.show();}}return true;}});setContentView(mContent);}public Bitmap drawableToBitmap(Drawable drawable){DisplayMetrics dm = this.getResources().getDisplayMetrics();Bitmap bitmap = Bitmap.createBitmap(dm.widthPixels,dm.heightPixels,drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565);Canvas canvas = new Canvas(bitmap);drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());drawable.draw(canvas);return bitmap;}}package com.tfs.myanim.flycat;import java.util.Random;import com.tfs.myanim.flycat.R;import android.app.Activity;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.Menu;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.view.animation.Animation;import android.view.animation.Animation.AnimationListener;import android.view.animation.TranslateAnimation;import android.widget.FrameLayout;import android.widget.RelativeLayout;import android.view.KeyEvent;public class MainActivity extends Activity{public final static int MAX_FLYCAT = 30;public final static int MAX_FIREWORK = 20;private RelativeLayout mLayer1;private RelativeLayout mLayer2;private FrameLayout mContainer;private boolean mRunning = false;private int[] mLoc = new int[2];@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mContainer = (FrameLayout) findViewById(R.id.container);mLayer1 = (RelativeLayout) findViewById(R.id.layer1);mLayer2 = (RelativeLayout) findViewById(R.id.layer2);mContainer.setOnTouchListener(new OnTouchListener(){@Overridepublic boolean onTouch(View v, MotionEvent event){final int action = event.getAction();DLog.d("action = " + action);if (action == MotionEvent.ACTION_DOWN){if (!mRunning){fly();}else{stopAndFinish();}}else if (action == MotionEvent.ACTION_UP){}return true;}});initFlayCat();initFirework();mContainer.postDelayed(new Runnable(){@Overridepublic void run(){fly();}}, 500);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubif(mRunning){stopAndFinish();}return super.onKeyDown(keyCode, event);}private void initFlayCat(){for (int i = 0; i < MAX_FLYCAT; i++){float z = ((float)i/MAX_FLYCAT);z*=z;FlyCatView flycat = new FlyCatView(this,z,i);flycat.setVisibility(View.INVISIBLE);mLayer2.addView(flycat);}}private void fly(){mRunning = true;int n = mLayer2.getChildCount();for (int i = 0; i < n; i++){View v = mLayer2.getChildAt(i);if (v instanceof FlyCatView){setupFlycatView((FlyCatView) v,i);}}n = mLayer1.getChildCount();for (int i = 0; i < n; i++){View v = mLayer1.getChildAt(i);if (v instanceof FireworkView){setupFireworkView((FireworkView) v);}}}public void setupFireworkView(FireworkView v){v.setImageResource(R.drawable.firework);final AnimationDrawable anim = (AnimationDrawable) v.getDrawable();v.postDelayed(new Runnable(){public void run(){anim.start();}}, (int) randfrange(0, 1000));}static Random sRNG = new Random();static float lerp(float a, float b, float f){return (b - a) * f + a;}static float randfrange(float a, float b){return lerp(a, b, sRNG.nextFloat());}public void setupFlycatView(final FlyCatView v,float i){final AnimationDrawable anim = (AnimationDrawable) v.getDrawable();v.postDelayed(new Runnable(){public void run(){anim.start();}}, (int) randfrange(0, 1000));DisplayMetrics dm = getResources().getDisplayMetrics();int aniX,aniXend ;if(v.mHeight<50){aniX = v.mWidth + (int)randfrange(0,200);aniXend = dm.widthPixels + v.mWidth + 50;}else{aniX = -450;aniXend = dm.widthPixels + 400;}final TranslateAnimation am = new TranslateAnimation(aniX,aniXend + 400, 0, 0);/*final int maxDuration = 4000;final int minDuration = 500;float k = (maxDuration - minDuration)/ (FlyCatView.VMIN - FlyCatView.VMAX);float b = maxDuration - (k * FlyCatView.VMIN);long duration = (long) (v.getWidth() * k + b);*/long duration = (2*v.MAX_HEIGHT-v.mHeight)*10;DLog.d("view index = " + v.i + "druation = " + duration);if(duration<=2000){duration = 3000;}am.setDuration(duration);am.setAnimationListener(new AnimationListener(){@Overridepublic void onAnimationStart(Animation animation){v.setVisibility(View.VISIBLE);}@Overridepublic void onAnimationRepeat(Animation animation){}@Overridepublic void onAnimationEnd(Animation animation){if (mRunning){DisplayMetrics metrices = MainActivity.this.getResources().getDisplayMetrics();v.setVisibility(View.INVISIBLE);//if (!(v instanceof FlyCatView)) continue;FlyCatView nv = (FlyCatView) v; nv.update(animation.getDuration() / 1000f); final float catWidth = nv.getWidth() * nv.ScaleX; final float catHeight = nv.getHeight() * nv.ScaleY; if ( nv.x + catWidth < -2 || nv.x > metrices.widthPixels + 2 || nv.y + catHeight < -2 || nv.y > metrices.heightPixels + 2) { nv.randomSize2(); }setupFlycatView(v,v.i);}}});v.postDelayed(new Runnable(){public void run(){v.setAnimation(am);}}, (int) randfrange(0, 1000));}public void initFirework(){for (int i = 0; i < MAX_FIREWORK; i++){FireworkView firework = new FireworkView(this);mLayer1.addView(firework);}}public void stopAndFinish(){mRunning = false;int n = mLayer2.getChildCount();for (int i = 0; i < n; i++){View v = mLayer2.getChildAt(i);if (v instanceof FlyCatView){Animation am = v.getAnimation();if (null != am){am.cancel();}}}n = mLayer1.getChildCount();for (int i = 0; i < n; i++){View v = mLayer1.getChildAt(i);if (v instanceof FireworkView){final AnimationDrawable anim = (AnimationDrawable) ((FireworkView) v).getDrawable();if (null != anim){anim.stop();}}}mLayer1.removeAllViews();mLayer2.removeAllViews();this.finish();}}package com.tfs.myanim.flycat;import android.content.Context;import android.util.DisplayMetrics;import android.widget.ImageView;import android.widget.RelativeLayout;public class FireworkView extends ImageView{private DisplayMetrics mDM = null;private float scaleX,scaleY;public FireworkView(Context context){super(context);initView(context);}private void initView(Context context){mDM = this.getResources().getDisplayMetrics();randomSize();}private void randomSize(){final float scale = MainActivity.randfrange(0.1f, 1f);this.scaleX = scale;this.scaleY = scale;RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams((int)(60*scaleX),(int) (60*scaleY));final int left = (int) MainActivity.randfrange(0, mDM.widthPixels);final int top = (int) MainActivity.randfrange(0, mDM.heightPixels);lp.leftMargin = left;lp.topMargin = top;this.setLayoutParams(lp);}}package com.tfs.myanim.flycat;import com.tfs.myanim.flycat.R;import android.content.Context;import android.util.DisplayMetrics;import android.widget.ImageView;import android.widget.RelativeLayout;public class FlyCatView extends ImageView{public static final float VMAX = 1000.0f; public static final float VMIN = 100.0f;public final static int MAX_HEIGHT = 350;public final static int MIN_WIDTH = 100;public final static int MAX_WIDTH = 800;private DisplayMetrics mDM = null;public int mWidth = 0;public int mHeight = 0;private int[] mResIds = new int[12];public float z,v;public float ScaleX;public float ScaleY;public float x,y,i;public long druation;public FlyCatView(Context context,float z,int i){super(context);loadRes();this.z = z;this.i = i;initView(context);}private void initView(Context context){mDM = this.getResources().getDisplayMetrics();randomSize();int r = (int) (Math.random() * 12);// this.setBackgroundResource(mResIds[r]);this.setImageResource(R.drawable.flycat);this.setScaleType(ScaleType.FIT_CENTER);}private void loadRes(){mResIds[0] = R.drawable.nyandroid00;mResIds[1] = R.drawable.nyandroid01;mResIds[2] = R.drawable.nyandroid02;mResIds[3] = R.drawable.nyandroid03;mResIds[4] = R.drawable.nyandroid04;mResIds[5] = R.drawable.nyandroid05;mResIds[6] = R.drawable.nyandroid06;mResIds[7] = R.drawable.nyandroid07;mResIds[8] = R.drawable.nyandroid08;mResIds[9] = R.drawable.nyandroid09;mResIds[10] = R.drawable.nyandroid10;mResIds[11] = R.drawable.nyandroid11;}private void randomSize(){randomSize2();mWidth = (int)MainActivity.randfrange(0,mDM.widthPixels);}public void randomSize2(){/*final int w = (int) (MIN_WIDTH + Math.random()* (MAX_WIDTH - MIN_WIDTH));final int h = w * 11 / 16;mWidth = w;RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(w, h);final int left = 0;// (int) (-50 + Math.random() * 50);final int top = (int) (Math.random() * (mDM.heightPixels - lp.height));lp.leftMargin = left;lp.topMargin = top;this.setLayoutParams(lp);*/final float scale = MainActivity.lerp(0.1f,2f,z);ScaleX = scale;ScaleY = scale;mWidth = (int)(MAX_WIDTH*ScaleX);mHeight = (int)(MAX_HEIGHT*ScaleY);RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(mWidth,mHeight);DLog.d("view index = " + i + "view mWidth = " + mWidth + "mHeight = " + mHeight);x = -ScaleX*mWidth+1;y = MainActivity.randfrange(0, mDM.heightPixels-scale*mHeight);//(Math.random() * (mDM.heightPixels - lp.height));if(y<mHeight){y= y+80;}lp.topMargin = (int)y;DLog.d("view x = " + x + "y = " + y);this.setLayoutParams(lp);v = MainActivity.lerp(VMIN, VMAX, z);}public void update(float dt) { //dist += v * dt; this.x = (int)(this.x + v * dt); }}<?xml version="1.0" encoding="utf-8"?>
原创粉丝点击