android自定义吐司toast的方法

// 获得窗体的管理者
WindowManager mWm = (WindowManager) getSystemService(WINDOW_SERVICE);
// 拿到手机屏幕的宽
int mScreenWidth = mWm.getDefaultDisplay().getWidth();
// 拿到手机屏幕的高
int   mScreenHeight = mWm.getDefaultDisplay().getHeight();


/**
* 自定义吐司

* @param incomingNumber
*/
private void showToast() {
// 获取窗体的管理者
final WindowManager.LayoutParams params = new WindowManager.LayoutParams();


params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
// 删掉了原有吐司中定义的不能被触摸flag
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
params.format = PixelFormat.TRANSLUCENT;
params.type = WindowManager.LayoutParams.TYPE_PHONE;// 将类型修改成打电话的级别
// 让自定义吐司,在屏幕的左上角
params.gravity = Gravity.LEFT + Gravity.TOP;
params.setTitle("Toast");


mViewToast = View.inflate(getApplicationContext(), R.layout.toast_view,
null);
TextView tv_address = (TextView) mViewToast
.findViewById(R.id.tv_address);


// 图片所在的数组int,这几个图片是自己选定的图片
int[] drawableId = new int[] { R.drawable.call_locate_white,
R.drawable.call_locate_orange, R.drawable.call_locate_blue,
R.drawable.call_locate_gray, R.drawable.call_locate_green };


// toast_style放置了5张图片数组的角标
int toast_style = SharedPreUtil.getInt(this, ConstantValue.TOAST_STYLE,
0);
// 给吐司取定义sp中存储角标指向的图片
tv_address.setBackgroundResource(drawableId[toast_style]);
// 给自定义的吐司设置触摸的点击事件
mViewToast.setOnTouchListener(new OnTouchListener() {
private int startX;
private int startY;


@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 获取起始坐标点
startX = (int) event.getRawX();
startY = (int) event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
// 获取移动过程中的坐标点
int moveX = (int) event.getRawX();
int moveY = (int) event.getRawY();


// 这个地方的x与y轴的数据一定要一一对应,才行
int disX = moveX - startX;
int disY = moveY - startY;


params.x = params.x + disX;
params.y = params.y + disY;


if (params.x < 0) {
params.x = 0;
}


if (params.x > mScreenWidth - mViewToast.getWidth()) {
params.x = mScreenWidth - mViewToast.getWidth();
}


if (params.y < 0) {
params.y = 0;
}


// -22的目的是为例减去顶部的显示框
if (params.y > mScreenHeight - 22 - mViewToast.getHeight()) {
params.y = mScreenHeight - 22 - mViewToast.getHeight();
}


// 在监听到了移动后,需要去调用窗体告知控件位置更新的方法
mWm.updateViewLayout(mViewToast, params);


// 在移动完成后,起始坐标重新赋值
startX = (int) event.getRawX();
startY = (int) event.getRawY();
break;
case MotionEvent.ACTION_UP:
// 获取抬起时候的最终位置,并且将其记录在sp
SharedPreUtil.putInt(getApplicationContext(),
ConstantValue.LOCATION_X, params.x);
SharedPreUtil.putInt(getApplicationContext(),
ConstantValue.LOCATION_Y, params.y);
break;
}
return true;
}
});


// 自定义的view.也就是吐司,需要添加在手机窗体上,手机的窗体对象
mWm.addView(mViewToast, params);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值