资讯详情

Android之Toast自定义动画

参考出处:http://www.cnblogs.com/net168/p/4237528.html

(会有窗体泄漏has leaked window) 避免在线程removeView

public class MyToast {

boolean mShowTime;

boolean mIsShow;

WindowManager mWdm;

Timer mTimer;

View mToastView;

WindowManager.LayoutParams mParams;

public MyToast(Context context, String text, boolean showTime) {

mShowTime = showTime;//记录Toast显示长度类型

mIsShow = false;//记录当前Toast内容是否已显示

mWdm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

mToastView = Toast.makeText(context, text, Toast.LENGTH_SHORT).getView();//通过Toast实例获取当前android系统的默认Toast的View布局

mTimer = new Timer();

setParams();

}

/**

* 设置布局参数

*/

private void setParams() {

mParams = new WindowManager.LayoutParams();

mParams.height = WindowManager.LayoutParams.WRAP_CONTENT;

mParams.width = WindowManager.LayoutParams.WRAP_CONTENT;

mParams.format = PixelFormat.TRANSLUCENT;

mParams.windowAnimations = R.style.anim_view;///设置进出动画效果

mParams.type = WindowManager.LayoutParams.TYPE_TOAST;

mParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;

mParams.gravity = Gravity.BOTTOM;//位置

mParams.y = 50;

}

public static MyToast makeText(Context context, String text, boolean showTime) {

MyToast result = new MyToast(context, text, showTime);

return result;

}

/**

* 此处修改 避免窗体泄漏

*/

public void show() {

if (!mIsShow) {

mIsShow = true;

mWdm.addView(mToastView, mParams);

mTimer.schedule(new TimerTask() {

@Override

public void run() {

mHandler.sendEmptyMessage(1);

}

}, (long) (mShowTime ? 1500 : 1500));

}

}

Handler mHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

mWdm.removeViewImmediate(mToastView);

mIsShow = false;

super.handleMessage(msg);

}

};

}

标签: sub微型d连接器mwdm2l

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台