[关闭]
@MasterLeng 2015-06-25T07:47:58.000000Z 字数 4293 阅读 2303

模仿什么值得买Toast

android开发 Toast控件
什么值得买这个app瞅着有点Material Design的风格,比较喜欢,特别是退出的Toast很有特点,上一个渐渐升起,然后回落的动画。
- MainActivity

public class MainActivity extends Activity {
private long backTime =0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main);
    Button btn  = new Button(this);
    btn.setText("点击弹出Toast");
    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            ImatitionToast.makeText(MainActivity.this, "退出啦", 2000).setAnimator();//调用自定义Toast
        }
    });
    this.addContentView(btn, new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));      
}

}
ImatitionToast

public class ImatitionToast {
private WindowManager mWm;//处理Toast加载状态的对象
private View view;//Toast的背景
private WindowManager.LayoutParams mParams;//Toast背景设置
private Context context;
private DisplayMetrics dm;
private LayoutInflater inflater;
private int showTime;
public ImatitionToast(Context context,String title,int showTime) {
    // TODO Auto-generated constructor stub
    dm = context.getResources().getDisplayMetrics();
    this.showTime = showTime;
    this.context = context;
    mWm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    mParams = new WindowManager.LayoutParams();
    inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = inflater.from(context).inflate(R.layout.tv_content, null);
    setParams();
}

//设置WindowManager参数,比如显示方式
public void setParams()
{
    mParams.height = WindowManager.LayoutParams.MATCH_PARENT;//必须是MATCH_PARENT否则不会显示在屏幕上
    mParams.width = WindowManager.LayoutParams.MATCH_PARENT;
    mParams.gravity = Gravity.CENTER_HORIZONTAL;//横向居中显示
    mParams.y= dm.widthPixels/5*3;//显示处于屏幕的3/5位置
    mParams.type = WindowManager.LayoutParams.TYPE_TOAST;//显示是以Toast的形式
    mParams.format = PixelFormat.TRANSLUCENT;//半透明
    mParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON              |WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;}

/**
 * @param context
 * @param title Toast显示内容
 * @param showTime Toast停留时间
 */
public static ImatitionToast makeText(Context context,String title,int showTime)
{
    return  new ImatitionToast(context, title, showTime);
}


//设置动画
public void setAnimator()
{
    mWm.addView(view, mParams);
    final AnimatorSet set1 = new AnimatorSet();
    final float startY = dm.heightPixels/5*4;//初始的Y坐标
    final float endY =  startY -200; //终止时的Y坐标
    //上移动画
    final ObjectAnimator animatorAlpha1 = ObjectAnimator.ofFloat(view, "alpha", 0f,1f);//透明度动画,从0到1
    final ObjectAnimator animatorTranslation1 = ObjectAnimator.ofFloat(view,"translationY",startY,endY);//移动动画
    animatorAlpha1.setDuration(3000);//持续时间3秒
    animatorTranslation1.setDuration(3000);//持续时间三秒


    final Handler handler = new Handler();
    //下落动画
    final AnimatorSet set2 = new AnimatorSet();
    final ObjectAnimator animatorAlpha2 = ObjectAnimator.ofFloat(view, "alpha", 1f,0f);
    final ObjectAnimator animatorTranslation2 = ObjectAnimator.ofFloat(view, "translationY", endY,startY);
    set1.addListener(new AnimatorListener() {

        @Override
        public void onAnimationStart(Animator animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationRepeat(Animator animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationEnd(Animator animation) {
            // TODO Auto-generated method stub
            //Toast到达顶端后,停留两秒,执行下落动画,下落动画同样持续两秒
            handler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    set2.play(animatorTranslation2).with(animatorAlpha2);
                    set2.setDuration(2000);
                    set2.start();
                }
            }, showTime);
        }

        @Override
        public void onAnimationCancel(Animator animation) {
            // TODO Auto-generated method stub

        }
    });
    handler.post(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            set1.play(animatorTranslation1).with(animatorAlpha1);
            set1.start();
        }
    });
}

}
R.layout.tv_content

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical" >
<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@drawable/shape"
    android:gravity="center"
    android:padding="10dp"
    android:text="This is a Toast!"
    android:textColor="#e33125"
    android:textSize="19sp" />

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注