java自定义悬浮窗体_自定义toast你需要的都在这里,单例模式,自定义布局,完全自定义,可拖动的悬浮窗...

package com.z.c;

import android.content.Context;

import android.graphics.Color;

import android.graphics.PixelFormat;

import android.util.Log;

import android.view.MotionEvent;

import android.view.View;

import android.view.WindowManager;

import android.widget.TextView;

import android.widget.Toast;

/**

* Created by z on 2016/5/9.

*/

public class CustomToast {

private Context mContext;

private WindowManager mWM;

private View mView;

private TextView mTvAddress;

private int mStartX;

private int mStartY;

private WindowManager.LayoutParams mParams;

/**

* 初始化toast

*

* @param context

*/

public void initToast(Context context) {

mContext = context;

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

mParams = new WindowManager.LayoutParams();

mParams.windowAnimations = R.style.dialog_anim;

mParams.height = WindowManager.LayoutParams.WRAP_CONTENT;

mParams.width = WindowManager.LayoutParams.WRAP_CONTENT;

mParams.format = PixelFormat.TRANSLUCENT; // 显示效果

//如果设置为这个值:TYPE_SYSTEM_ALERT,那么

mParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

mParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON

| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;

//                |WindowManager.LayoutParams.FLAG_FULLSCREEN

//                |WindowManager.LayoutParams. FLAG_WATCH_OUTSIDE_TOUCH;

//不允许获得焦点,toast的通性

//  WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE

//不允许接收触摸事件

//  | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;

}

/**

* 显示toast

*

* @param context

* @param address

*/

public void showCustomToast(Context context, String address) {

initToast(context);

mView = View.inflate(mContext, R.layout.view_toast_address, null);

mTvAddress = (TextView) mView.findViewById(R.id.toast_tv_address);

mTvAddress.setText(address);

mView.setBackgroundColor(Color.BLUE);

mView.setLayoutParams(mParams);

//mView.setAnimation(R.animator.ani);

mTvAddress.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(mContext,"hah",0).show();

Log.d("xii","");

}

});

mView.setOnTouchListener(new View.OnTouchListener() {

int lastX, lastY;

int paramX, paramY;

public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

lastX = (int) event.getRawX();

lastY = (int) event.getRawY();

paramX = mParams.x;

paramY = mParams.y;

break;

case MotionEvent.ACTION_MOVE:

int dx = (int) event.getRawX() - lastX;

int dy = (int) event.getRawY() - lastY;

mParams.x = paramX + dx;

mParams.y = paramY + dy;

// 更新悬浮窗位置

mWM.updateViewLayout(mView, mParams);

break;

}

return true;

}

});

mWM.addView(mView, mParams);

}

/**

* 隐藏toast

*/

public void hideCustomToast() {

if (mView != null) {

if (mView.getParent() != null) {

mWM.removeView(mView);

}

mView = null;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值