<pre name="code" class="java"> /**
* 自定义土司 简单实现,相关的权限
*
*/
public void myToast(String address) {
view = View.inflate(this, R.layout.address_show, null);
TextView textview = (TextView) view.findViewById(R.id.tv_address);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
mHits[mHits.length - 1] = SystemClock.uptimeMillis();
if (mHits[0] >= (SystemClock.uptimeMillis() - 500)) {
// 双击居中了。。。
params.x = wm.getDefaultDisplay().getWidth()/2-view.getWidth()/2;
wm.updateViewLayout(view, params);
Editor editor = sp.edit();
editor.putInt("lastx", params.x);
editor.commit();
}
}
});
// 给view对象设置一个触摸的监听器
view.setOnTouchListener(new OnTouchListener() {
// 定义手指的初始化位置
int startX;
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();
Log.i(TAG, "手指摸到控件");
break;
case MotionEvent.ACTION_MOVE:// 手指在屏幕上移动
int newX = (int) event.getRawX();
int newY = (int) event.getRawY();
int dx = newX - startX;
int dy = newY - startY;
Log.i(TAG, "手指在控件上移动");
params.x += dx;
params.y += dy;
// 考虑边界问题
if (params.x < 0) {
params.x = 0;
}
if (params.y < 0) {
params.y = 0;
}
if (params.x > (wm.getDefaultDisplay().getWidth() - view
.getWidth())) {
params.x = (wm.getDefaultDisplay().getWidth() - view
.getWidth());
}
if (params.y > (wm.getDefaultDisplay().getHeight() - view
.getHeight())) {
params.y = (wm.getDefaultDisplay().getHeight() - view
.getHeight());
}
wm.updateViewLayout(view, params);
// 重新初始化手指的开始结束位置。
startX = (int) event.getRawX();
startY = (int) event.getRawY();
break;
case MotionEvent.ACTION_UP:// 手指离开屏幕一瞬间
// 记录控件距离屏幕左上角的坐标
Log.i(TAG, "手指离开控件");
Editor editor = sp.edit();
editor.putInt("lastx", params.x);
editor.putInt("lasty", params.y);
editor.commit();
break;
}
return false;// 事件处理完毕了。不要让父控件 父布局响应触摸事件了。
}
});
textview.setText(address);
// 窗体的参数就设置好了
params = new WindowManager.LayoutParams();
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
// 与窗体左上角对其
params.gravity = Gravity.TOP + Gravity.LEFT;
// 指定窗体距离左边100 上边100个像素
params.x = sp.getInt("lastx", 0);
params.y = sp.getInt("lasty", 0);
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
params.format = PixelFormat.TRANSLUCENT;
// android系统里面具有电话优先级的一种窗体类型,记得添加权限。
params.type = WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;
wm.addView(view, params);
}
</pre><pre name="code" class="java">
相关的权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />