可移动悬浮窗口实现
来源:互联网 发布:手持机gps数据采集器 编辑:程序博客网 时间:2024/04/30 15:11
先直接上代码:(代码中有少量的注解,但都是实现功能的关键)
接口ViewManager中定义了addView、reMoveView、updateView方法,WindManager实现了ViewManager但是没有直接去实现这三个方法,间接的交给WindowManagerGlobal去实现addView、reMoveView、updateView方法。
package com.example.andyshangguan.test_windowmnanger;import android.annotation.SuppressLint;import android.app.Activity;import android.content.Context;import android.graphics.PixelFormat;import android.os.Bundle;import android.util.Log;import android.view.Gravity;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.view.ViewGroup;import android.view.WindowManager;import android.view.WindowManager.LayoutParams;import android.widget.Toast;@SuppressLint("ServiceCast")public class MainActivity extends Activity { private View windowView; private LayoutInflater inflater; private WindowManager.LayoutParams wL; private WindowManager windowManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { // inflater = getLayoutInflater(); inflater= (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); windowView = inflater.inflate(R.layout.layout_showwindow, null); //(ViewGroup)getWindow().getDecorView().findViewById(android.R.id.content)); windowView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(MainActivity.this, "windowView", Toast.LENGTH_SHORT).show(); } }); windowView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { //getRawX是触摸位置相对于屏幕的坐标,getX是相对于按钮的坐标 float rawx = event.getRawX() - v.getMeasuredWidth() / 2; float rawy = event.getRawY() - v.getMeasuredHeight() / 2; switch (event.getAction()) { case MotionEvent.ACTION_MOVE: Log.e("info", " event.getX()====" + event.getRawX()); Log.e("info", " event.getY()====" + event.getRawY()); wL.x = (int) rawx; wL.y = (int) rawy; windowManager.updateViewLayout(v, wL); break; default: break; } return false; } }); wL = new WindowManager.LayoutParams(LayoutParams.WRAP_CONTENT, //TYPE_TOAST类型系统是不需要权限的。如果申明为TYPE_SYSTEM_XXX权限,在AndroidManifest.xml申明权限//参考:http://www.jianshu.com/p/167fd5f47d5c?utm_campaign=maleskine&utm_content=note&utm_medium=writer_share&utm_source=weibo LayoutParams.WRAP_CONTENT, LayoutParams.TYPE_TOAST, 0, PixelFormat.TRANSPARENT); wL.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_SHOW_WHEN_LOCKED; wL.gravity = Gravity.LEFT | Gravity.TOP; wL.x = 100; wL.y = 300; windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); }//在布局文件中直接使用的onClik方法 public void showWindow(View v) { switch (v.getId()) { case R.id.showWindow: windowManager.addView(windowView, wL); break; default: break; } }}
0 0
- 可移动悬浮窗口实现
- WindowManager实现悬浮窗口&可自由移动的悬浮窗口
- WindowManager实现悬浮窗口&可自由移动的悬浮窗口
- WindowManager实现悬浮窗口&可自由移动的悬浮窗口
- Android中可自由移动悬浮窗口的实现
- Android中可自由移动悬浮窗口的实现
- Android中可自由移动悬浮窗口的实现
- WindowManager实现悬浮窗口&可自由移动的悬浮窗口
- android实现 桌面移动悬浮窗口实现
- android 可移动悬浮框的实现
- 通过WindowsManager实现移动的悬浮窗口
- Android中可自由移动悬浮窗口的Demo
- Android中可自由移动悬浮窗口的Demo
- Android Window 二 可移动悬浮窗口 WindowManager
- Android中可移动悬浮窗口 WindowManager详解
- Android Window 二 可移动悬浮窗口 WindowManager
- Android 为应用增加可移动的悬浮窗口
- Android 为应用增加可移动的悬浮窗口
- spring与 mybatis整合 - 整合思路
- 深入理解javascript原型和闭包(7)——原型的灵活性
- Leetcode38: Count and Say
- Python使用SMTP自动发送邮件
- 阿里云Ubuntu(14.04)环境搭建tigase---03--Tigase XMPP Server的安装
- 可移动悬浮窗口实现
- 《提高单机短连接QPS到20万》读后分享
- MUI——创建页面的三种方法
- django的创建项目
- 单例模式
- 深入理解javascript原型和闭包(8)——简述【执行上下文】上
- python自学之路-05
- Effective C++ 学习笔记(十三)
- iOS Swift版本 在很多场景下可以使用的带箭头的View