package com.example.ceshi; import android.os.Build; import android.os.Bundle; import android.animation.IntEvaluator; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.app.Activity; import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnKeyListener; import android.view.ViewTreeObserver.OnPreDrawListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; @SuppressLint("NewApi") public class MainActivity extends Activity { public Webservice webServiceManager; private EditText indata; private TextView show; private Button click; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); indata = (EditText)findViewById(R.id.indata); show = (TextView)findViewById(R.id.show); click = (Button)findViewById(R.id.click); click.setOnClickListener(new Click1()); } @Override public void onWindowFocusChanged(boolean hasFocus) { // TODO Auto-generated method stub Log.e("---","onWindowFocusChanged"+click.getLayoutParams().width); super.onWindowFocusChanged(hasFocus); } //自定义toast 弹出的位置 class Click1 implements OnClickListener{ @Override public void onClick(View v) { Toast toast = Toast.makeText(getApplicationContext(), "自定义位置", Toast.LENGTH_LONG); //居中 toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); performAnimate2(click, click.getWidth(), 500); performAnimate3(click, click.getHeight(), 200); } } //自定义toast 弹出的位置带有图片的 class Click2 implements OnClickListener{ @Override public void onClick(View v) { Toast toast = Toast.makeText(getApplicationContext(), "自定义位置", Toast.LENGTH_LONG); //居中 toast.setGravity(Gravity.CENTER, 0, 0); LayoutInflater inflater= LayoutInflater.from(MainActivity.this); View view = inflater.inflate(R.layout.add, null); toast.setView(view); toast.show(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } private void performAnimate() { ViewWrapper wrapper = new ViewWrapper(click); ObjectAnimator.ofInt(wrapper, "width", 500).setDuration(5000).start(); ObjectAnimator.ofInt(wrapper, "width", 120).setDuration(5000).start(); } private static class ViewWrapper { private View mTarget; public ViewWrapper(View target) { mTarget = target; } public int getWidth() { Log.e("---","---->>>>>"+mTarget.getLayoutParams().width); return mTarget.getLayoutParams().width; } public void setWidth(int width) { mTarget.getLayoutParams().width = width; mTarget.requestLayout(); } } private void performAnimate2(final View target, final int start, final int end) { ValueAnimator valueAnimator = ValueAnimator.ofInt(1, 100); valueAnimator.addUpdateListener(new AnimatorUpdateListener() { //持有一个IntEvaluator对象,方便下面估值的时候使用 private IntEvaluator mEvaluator = new IntEvaluator(); @Override public void onAnimationUpdate(ValueAnimator animator) { //获得当前动画的进度值,整型,1-100之间 int currentValue = (Integer)animator.getAnimatedValue(); Log.e("----", "current value: " + currentValue); //计算当前进度占整个动画过程的比例,浮点型,0-1之间 float fraction = currentValue / 100f; //这里我偷懒了,不过有现成的干吗不用呢 //直接调用整型估值器通过比例计算出宽度,然后再设给Button target.getLayoutParams().width = mEvaluator.evaluate(fraction, start, end); target.requestLayout(); } }); valueAnimator.setDuration(5000).start(); } private void performAnimate3(final View target, final int start, final int end) { ValueAnimator valueAnimator = ValueAnimator.ofInt(1, 100); valueAnimator.addUpdateListener(new AnimatorUpdateListener() { //持有一个IntEvaluator对象,方便下面估值的时候使用 private IntEvaluator mEvaluator = new IntEvaluator(); @Override public void onAnimationUpdate(ValueAnimator animator) { //获得当前动画的进度值,整型,1-100之间 int currentValue = (Integer)animator.getAnimatedValue(); Log.e("----", "current value: " + currentValue); //计算当前进度占整个动画过程的比例,浮点型,0-1之间 float fraction = currentValue / 100f; //这里我偷懒了,不过有现成的干吗不用呢 //直接调用整型估值器通过比例计算出宽度,然后再设给Button target.getLayoutParams().height = mEvaluator.evaluate(fraction, start, end); target.requestLayout(); } }); valueAnimator.setDuration(5000).start(); } }
来自 : http://blog.csdn.net/singwhatiwanna/article/details/17841165