@MasterLeng
2015-06-25T07:47:58.000000Z
字数 4293
阅读 2303
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" />