Android之Toast自定义动画
16lz
2021-01-23
参考出处: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); } };}
更多相关文章
- Android五大布局详解及属性
- Android 控件布局实现卡片效果,阴影效果
- Android 键盘布局总结
- Android 开发 之 折叠布局(CollapsingToolbarLayout)
- Android开发中布局属性的使用汇总
- Android 处理多线程 UserTask