OtherBackFloatWindow.java
5.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
package com.sw.laryngoscope.floatwindow;
import android.app.Activity;
import android.content.Context;
import android.graphics.PixelFormat;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.sw.laryngoscope.R;
import com.sw.laryngoscope.utils.ShellUtils;
import com.sw.laryngoscope.utils.Support;
//进入分享界面后悬浮窗口类
public class OtherBackFloatWindow {
private WindowManager mWindowManager;
private LayoutParams wmParams;
private LinearLayout mFloatWindow = null;
private Activity mContext;
private LinearLayout lay_back = 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 static final String TAG = "OtherBackFloatWindow";
private FloatWindowManager mFloatWindowManager;
private boolean isBackToSetting = true;
public OtherBackFloatWindow(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);
mFloatAdded = false;
isBackToSetting = true;
scn_w = dm.widthPixels;
scn_h = dm.heightPixels;
// float_win_w = scn_w / 3;
// float_win_h = 1080 * float_win_w / 1920;
float_win_w = 200;
float_win_h = 50;
mFloatWindow = CreateFloatWindow(R.layout.float_window_other_back, Gravity.LEFT | Gravity.TOP,
50, 0, float_win_w, float_win_h);
lay_back = (LinearLayout) mFloatWindow.findViewById(R.id.lay_back);
AddView(mFloatWindow);
setFloatViewListener();
lay_back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
stopFloat();
//ShellUtils.execCommand("kill " + Support.findPid(mContext, "com.android.settings"));
Support.backToSettingActivity(mContext,
"com.sw.laryngoscope",
"com.sw.laryngoscope.activity.HomeActivity", isBackToSetting);
}
});
}
private LinearLayout CreateFloatWindow(int id, int gravity, int x, int y, int w, int h) {
LinearLayout mWindow = (LinearLayout) 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 = (LinearLayout) 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 AddView(View view) {
if (view == mFloatWindow) {
if (mFloatAdded) {
return;
}
mWindowManager.addView(view, wmParams);
mFloatAdded = true;
}
}
private synchronized void RemoveView(View view) {
if (view == mFloatWindow) {
if (!mFloatAdded) {
return;
}
mWindowManager.removeView(view);
mFloatAdded = false;
}
}
public void stopFloat() {
if (mFloatWindow != null && mFloatAdded) {
RemoveView(mFloatWindow);
mFloatWindow = null;
}
}
public void hideFloatWindow() {
if (mFloatWindow != null) {
mFloatWindow.setVisibility(View.GONE);
}
}
public void showFloatWindow() {
mFloatWindow.setVisibility(View.VISIBLE);
}
private void setFloatViewListener() {
lay_back.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (!mFloatAdded) {
return false;
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
last_touch_time = event.getEventTime();
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
wmParams.x = (int) event.getRawX() - mFloatWindow.getMeasuredWidth() / 2;
wmParams.y = (int) event.getRawY() - mFloatWindow.getMeasuredHeight() / 2 - 25;
mWindowManager.updateViewLayout(mFloatWindow, wmParams);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
return (event.getEventTime() - last_touch_time > 220);
}
return false;
}
});
}
}