WindowManager之实现类似360桌面悬浮物
2014-09-05 08:58
246 查看
直接上代码
public class WindowMangerTestActivityaa extends Activity {
float rawX;
float rawY;
float xx = 0.0f;
float yy = 0.0f;
WindowManager manager;
WindowManager.LayoutParams params;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
final TextView tv = new TextView(this);
manager = (WindowManager) getApplicationContext().getSystemService(
Context.WINDOW_SERVICE);
params = new WindowManager.LayoutParams();
params.x = 0;
params.y = 0;
tv.setBackgroundColor(Color.WHITE);
tv.setTextColor(Color.BLACK);
tv.setText("adfasdfsdf");
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
params.alpha = 0.5f;
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
| WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
params.format = 1;
params.gravity = Gravity.LEFT| Gravity.TOP;
params.height = 80;
params.width = 80;
manager.addView(tv, params);
tv.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
rawX = event.getRawX();
rawY = event.getRawY();
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
xx = event.getX();
yy = event.getY();
break;
case MotionEvent.ACTION_MOVE:
params.x = (int) (rawX - xx);
params.y = (int) (rawY - yy);
manager.updateViewLayout(tv, params);
break;
default:
break;
}
// TODO Auto-generated method stub
return true;
}
});
}
}
请注意
1.getSystemService之前的那个getApplicationContext是必须的,一般情况下,大家可能会运用this(我也是),用了this之后导致,textview只能在当前的activity上显示,返回之后textview消失
2.params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;否则textview是拖不动的。
3.在AndroidManifest.xml中添加权限<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
4.在AndroidManifest.xml中的Activity节点属性中添加android:theme="@android:style/Theme.NoDisplay"
public class WindowMangerTestActivityaa extends Activity {
float rawX;
float rawY;
float xx = 0.0f;
float yy = 0.0f;
WindowManager manager;
WindowManager.LayoutParams params;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
final TextView tv = new TextView(this);
manager = (WindowManager) getApplicationContext().getSystemService(
Context.WINDOW_SERVICE);
params = new WindowManager.LayoutParams();
params.x = 0;
params.y = 0;
tv.setBackgroundColor(Color.WHITE);
tv.setTextColor(Color.BLACK);
tv.setText("adfasdfsdf");
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
params.alpha = 0.5f;
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
| WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
params.format = 1;
params.gravity = Gravity.LEFT| Gravity.TOP;
params.height = 80;
params.width = 80;
manager.addView(tv, params);
tv.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
rawX = event.getRawX();
rawY = event.getRawY();
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
xx = event.getX();
yy = event.getY();
break;
case MotionEvent.ACTION_MOVE:
params.x = (int) (rawX - xx);
params.y = (int) (rawY - yy);
manager.updateViewLayout(tv, params);
break;
default:
break;
}
// TODO Auto-generated method stub
return true;
}
});
}
}
请注意
1.getSystemService之前的那个getApplicationContext是必须的,一般情况下,大家可能会运用this(我也是),用了this之后导致,textview只能在当前的activity上显示,返回之后textview消失
2.params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;否则textview是拖不动的。
3.在AndroidManifest.xml中添加权限<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
4.在AndroidManifest.xml中的Activity节点属性中添加android:theme="@android:style/Theme.NoDisplay"
相关文章推荐
- WindowManager之实现类似360桌面悬浮物
- DELPHI实现类似仿360桌面的程序界面
- Android_WindowManager_实现类似360流量悬浮框
- DELPHI实现类似仿360桌面的程序界面
- DELPHI实现类似仿360桌面的程序界面
- VB6初步实现在WINXP下类似WIN7显示桌面的功能
- 利用Register protocol实现网页调用桌面程序(类似迅雷、QQ等)
- winform-实现类似QQ停靠桌面上边缘隐藏的效果
- Android实现桌面歌词(类似TTPlayer)
- 如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?
- IOS 实现类似桌面删除应用程序的效果(长按 可编辑 删除 图片按比例截取)
- 模仿实现360桌面水晶球式的一键清理特效
- android实现桌面icon未读信息图标(类似与iPhone的badge)
- 用CSS3实现类似苹果桌面的有趣抖动效果
- 实现一个类似360的button
- 用com组件实现类似远程桌面功能
- MFC定时器实现类似QQ桌面自动隐藏效果
- 实现一个类似360的button
- WindowManager实现悬浮窗口&可自由移动的悬浮窗口(类似来电通记录流量)
- 实现类似launcher的滑动桌面