BatteryStatusFloatWindow.java 4.72 KB
package com.sw.laryngoscope.floatwindow;

import android.app.Activity;
import android.content.Context;
import android.graphics.PixelFormat;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.sw.laryngoscope.R;

public class BatteryStatusFloatWindow {

    private WindowManager mWindowManager;
    private LayoutParams wmParams;
    private RelativeLayout mFloatWindow = null;

    private Activity mContext;
    private TextView txt_running_status = null;
    private ImageView btn_close = null;
    private boolean mFloatAdded = false;
    private int scn_w = -1;
    private int scn_h = -1;
    private int float_win_w = -1;
    private int float_win_h = -1;

    private long last_touch_time = 0;
    private int last_x = 0;
    private int last_y = 0;
    private static final String TAG = "RunStatusFloatWindow";

    private FloatWindowManager mFloatWindowManager;
    private boolean mIsShow = true;

    public BatteryStatusFloatWindow(Context context) {

        mWindowManager = (WindowManager) ((Activity) context).getApplication().
                getSystemService(Context.WINDOW_SERVICE);
        mContext = (Activity) context;

    }

    public void startFloat(FloatWindowManager floatWindowManager) {
        mFloatWindowManager = floatWindowManager;
        DisplayMetrics dm = new DisplayMetrics();
        mWindowManager.getDefaultDisplay().getMetrics(dm);

        scn_w = dm.widthPixels;
        scn_h = dm.heightPixels;

        float_win_w = mContext.getResources().getDimensionPixelSize(R.dimen.dp_x_350);
        float_win_h = mContext.getResources().getDimensionPixelSize(R.dimen.dp_y_220);

        mFloatWindow = CreateFloatWindow(R.layout.float_window_runstatus, Gravity.LEFT | Gravity.TOP,
                100, scn_h - float_win_h - 100, float_win_w, float_win_h);
        //mFloatWindow.setVisibility(View.GONE);
        btn_close = (ImageView) mFloatWindow.findViewById(R.id.btn_close);


        AddView(mFloatWindow);

//        setFloatViewListener();

        btn_close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mFloatWindowManager.stopBatteryStatusFloatWindow();
            }
        });

    }

    private RelativeLayout CreateFloatWindow(int id, int gravity, int x, int y, int w, int h) {
        RelativeLayout mWindow = (RelativeLayout) GetView(id);
        LayoutParams Params = new LayoutParams();
        Params.type = LayoutParams.TYPE_PHONE;
        Params.format = PixelFormat.RGBA_8888;
        Params.flags = LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_HARDWARE_ACCELERATED;
        Params.gravity = gravity;
        Params.x = x;
        Params.y = y;
        Params.width = w;
        Params.height = h;
        Params.windowAnimations = android.R.style.Animation_Translucent;
        setParams(Params);
        mWindow.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        return mWindow;
    }

    public View GetView(int id) {
        View vv;
        LayoutInflater inflater = LayoutInflater.from(mContext.getApplication());
        vv = (RelativeLayout) inflater.inflate(id, null);
        vv.measure(
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
        );
        return vv;
    }

    private void setParams(LayoutParams param) {
        wmParams = param;
    }

    private synchronized void RemoveView(View view) {
        if (view == mFloatWindow) {
            if (mFloatAdded == false) {
                return;
            }
            mWindowManager.removeView(view);
            mFloatAdded = false;
        }
    }

    private synchronized void AddView(View view) {
        if (view == mFloatWindow) {
            if (mFloatAdded == true) {
                return;
            }
            mWindowManager.addView(view, wmParams);
            mFloatAdded = true;
        }
    }

    public void stopFloat() {
        if (mFloatWindow != null && mFloatAdded) {
            RemoveView(mFloatWindow);
            mFloatWindow = null;
        }
    }

    public void hideFloatWindow() {
        mFloatWindow.setVisibility(View.GONE);
    }

    public void showFloatWindow() {
        mFloatWindow.setVisibility(View.VISIBLE);
        Log.d("oso", "======showFloatWindow==mFloatWindow=");
    }
}