- 浏览: 1481446 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (419)
- XMPP (19)
- Android (180)
- Java (59)
- Network (4)
- HTML5 (13)
- Eclipse (9)
- SCM (23)
- C/C++ (4)
- UML (4)
- Libjingle (15)
- Tools&Softwares (29)
- Linphone (5)
- Linux&UNIX (6)
- Windows (18)
- Google (10)
- MISC (3)
- SIP (6)
- SQLite (5)
- Security (4)
- Opensource (29)
- Online (2)
- 文章 (3)
- MemoryLeak (10)
- Decompile (5)
- Ruby (1)
- Image (1)
- Bat (4)
- TTS&ASR (28)
- Multimedia (1)
- iOS (20)
- Asciiflow - ASCII Flow Diagram Tool.htm (1)
- Networking (1)
- DLNA&UPnP (2)
- Chrome (2)
- CI (1)
- SmartHome (0)
- CloudComputing (1)
- NodeJS (3)
- MachineLearning (2)
最新评论
-
bzhao:
点赞123!
Windows的adb shell中使用vi不乱码方法及AdbPutty -
wahahachuang8:
我觉得这种东西自己开发太麻烦了,就别自己捣鼓了,找个第三方,方 ...
HTML5 WebSocket 技术介绍 -
obehavior:
view.setOnTouchListenerview是什么
[转]android 一直在最前面的浮动窗口效果 -
wutenghua:
[转]android 一直在最前面的浮动窗口效果 -
zee3.lin:
Sorry~~
When I build "call ...
Step by Step about How to Build libjingle 0.4
http://ljl-xyf.iteye.com/blog/1207069
今天发现一些软件可以在android 的桌面上显示一些浮动小窗口,经过一番查找,终于找到的解决方案,代码如下:
FloatingFunc.java
package hrxcframe.comm;
import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.test.R;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
/**
* 可以永远显示在android屏幕最上方的浮动菜单
*
* @author liujl v1.0 需要添加 <uses-permission
* android:name="android.permission.SYSTEM_ALERT_WINDOW"
* /><!--系统弹出窗口权限-->权限不然会报错
*/
public class FloatingFunc {
/**
* 浮动窗口在屏幕中的x坐标
*/
private static float x = 0;
/**
* 浮动窗口在屏幕中的y坐标
*/
private static float y = 200;
/**
* 屏幕触摸状态,暂时未使用
*/
private static float state = 0;
/**
* 鼠标触摸开始位置
*/
private static float mTouchStartX = 0;
/**
* 鼠标触摸结束位置
*/
private static float mTouchStartY = 0;
/**
* windows 窗口管理器
*/
private static WindowManager wm = null;
/**
* 浮动显示对象
*/
private static View floatingViewObj = null;
/**
* 参数设定类
*/
public static WindowManager.LayoutParams params = new WindowManager.LayoutParams();
public static int TOOL_BAR_HIGH = 0;
/**
* 要显示在窗口最前面的对象
*/
private static View view_obj = null;
/**
* 要显示在窗口最前面的方法
*
* @param context
* 调用对象Context getApplicationContext()
* @param window
* 调用对象 Window getWindow()
* @param floatingViewObj
* 要显示的浮动对象 View
*/
public static void show(Context context, Window window, View floatingViewObj) {
// 加载xml文件中样式例子代码
// ********************************Start**************************
// LayoutInflater inflater =
// LayoutInflater.from(getApplicationContext());
// View view = inflater.inflate(R.layout.topframe, null);
// wm =
// (WindowManager)context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
// 加载xml文件中样式例子代码
// *********************************End***************************
//
// 关闭浮动显示对象然后再显示
close(context);
FloatingFunc.floatingViewObj = floatingViewObj;
view_obj = floatingViewObj;
Rect frame = new Rect();
// 这一句是关键,让其在top 层显示
// getWindow()
window.getDecorView().getWindowVisibleDisplayFrame(frame);
TOOL_BAR_HIGH = frame.top;
wm = (WindowManager) context// getApplicationContext()
.getSystemService(Activity.WINDOW_SERVICE);
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
| WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
params.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
| LayoutParams.FLAG_NOT_FOCUSABLE;
// 设置悬浮窗口长宽数据
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
// 设定透明度
params.alpha = 80;
// 设定内部文字对齐方式
params.gravity = Gravity.LEFT | Gravity.TOP;
// 以屏幕左上角为原点,设置x、y初始值ֵ
params.x = (int) x;
params.y = (int) y;
// tv = new MyTextView(TopFrame.this);
wm.addView(floatingViewObj, params);
}
/**
* 跟谁滑动移动
*
* @param event
* 事件对象
* @param view
* 弹出对象实例(View)
* @return
*/
public static boolean onTouchEvent(MotionEvent event, View view) {
// 获取相对屏幕的坐标,即以屏幕左上角为原点
x = event.getRawX();
y = event.getRawY() - 25; // 25是系统状态栏的高度
Log.i("currP", "currX" + x + "====currY" + y);// 调试信息
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
state = MotionEvent.ACTION_DOWN;
// panTime();
// 获取相对View的坐标,即以此View左上角为原点
mTouchStartX = event.getX();
mTouchStartY = event.getY();
Log.i("startP", "startX" + mTouchStartX + "====startY"
+ mTouchStartY);// 调试信息
break;
case MotionEvent.ACTION_MOVE:
state = MotionEvent.ACTION_MOVE;
updateViewPosition(view);
break;
case MotionEvent.ACTION_UP:
state = MotionEvent.ACTION_UP;
updateViewPosition(view);
mTouchStartX = mTouchStartY = 0;
break;
}
return true;
}
/**
* 关闭浮动显示对象
*/
public static void close(Context context) {
if (view_obj != null && view_obj.isShown()) {
WindowManager wm = (WindowManager) context
.getSystemService(Activity.WINDOW_SERVICE);
wm.removeView(view_obj);
}
}
/**
* 更新弹出窗口位置
*/
private static void updateViewPosition(View view) {
// 更新浮动窗口位置参数
params.x = (int) (x - mTouchStartX);
params.y = (int) (y - mTouchStartY);
wm.updateViewLayout(FloatingFunc.floatingViewObj, params);
}
}
测试代码,放到任意的 Activity 代码里就可以,可以用手拖动位置
final TextView tv = new TextView(getApplicationContext());
tv.setText("http://www.my400800.cn
");
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
FloatingFunc.onTouchEvent(arg1, tv);
return true;
}
});
效果如下:
注意事项:
一定要在AndroidManifest.xml添加
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
系统权限,不然会出错的呀。。。。。。。。。。。。。
评论
view是什么
发表评论
-
[Android] 为Android安装BusyBox —— 完整的bash shell
2013-12-27 10:19 1409http://www.cnblogs.com/xiaowen ... -
Windows的adb shell中使用vi不乱码方法及AdbPutty
2013-12-27 10:17 7391http://www.veryhuo.com/down/ht ... -
AppMobi推出新XDK,可创建测试PhoneGap项目
2012-09-03 13:39 2527AppMobi今天发布了一个新的工具PhoneGap Mobi ... -
Sencha
2012-09-03 12:59 1136http://www.sencha.com/ Se ... -
jQuery Mobile学习
2012-09-01 12:33 1624使用Jquery Mobile设计Android通讯录 ... -
BackBone
2012-09-01 12:34 1217Backbone.js 是一种重量级javascript M ... -
jQTouch
2012-08-30 15:57 934A Zepto/jQuery plugin for mobil ... -
SwiFTP
2012-08-30 15:43 1241SwiFTP is a FTP server that run ... -
kWS
2012-08-30 15:41 1143kWS is a lightweight and fast W ... -
jQuery Mobile
2012-08-30 15:07 974http://jquerymobile.com/ -
PhoneGap
2012-08-30 15:07 992http://phonegap.com/ -
Android Button background image pressed/highlighted and disabled states without
2012-08-06 12:49 1622http://shikii.net/blog/android- ... -
[AndriodTips]Image, saved to sdcard, doesn't appear in Android's Gallery app
2012-08-04 16:15 1109http://stackoverflow.com/questi ... -
Voice detection for Android
2012-07-23 11:39 2292Here it is, my fist JAVA applic ... -
[AndroidTip]local reference table overflow (max=512)的错误解决
2012-07-22 22:56 5949JNI层coding经常会遇到ReferenceTable o ... -
[AndroidTip]EditText如何初始状态不获得焦点?
2012-07-22 15:35 1181最简单的办法是在EditText前面放置一个看不到的Linea ... -
[AndroidTip]android textview滚动条
2012-07-21 14:29 1256本来是想做一个显示文字信息的,当文字很多时View的高度不能超 ... -
Google公布Android 4.1完整功能
2012-07-16 09:48 3137http://www.android.com/about/je ... -
Android开发:使用AudioTrack播放PCM音频数据【附源码】
2012-07-13 15:20 20770http://www.linuxidc.com/Linux/2 ... -
Android上的行车记录仪
2012-07-11 22:31 1963MyCar Recorder DailyRoads
相关推荐
android例子 360浮动窗口效果.rar 桌面浮动效果例子
实现了Android浮动窗口,类似于360窗口的网速显示,一共包括两种样式的悬浮窗,可以通过主Activity里的按钮开启或关闭,也可以直接点击浮动窗口关闭。
android最前端浮动窗口,应用于音乐播放器歌词显示、外挂监控等
类似360浮动窗口,值得学习,欢迎下载学习。
android桌面浮动窗口实现。窗口在左下角!
android 浮动按钮、浮动窗口、悬浮窗口.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
android 浮动窗口 小窗口
2021-辅助类库-Android 视频浮动窗口源码.zip
例子源码中的android 浮动按钮、浮动窗口、悬浮窗口
安卓Android源码——浮动窗口播放器.zip
可滑动的浮动窗口,模拟home按键功能,可以在其他应用程序中调用
android视频播放浮动窗口对话框,可以实现视频的浮动窗口播放。
这是一款android平台下的视频浮动窗口源码,原理很简单,代码不多,基本一看就懂,但是应用很有用,当然很多复杂的组合自己可以去实现,这只是一方面的应用。 测试视频放在/mnt/sdcard/test.mp4 网上随便找一个视频...
Android高级应用源码-浮动窗口播放器.zip
仿360浮动窗口效果,大家可以学习学习,分享代码
StandOut 是一个在Android应用中创建浮动窗口的框架,使用该框架可以方便的创建各种浮动窗口。可以指定窗口大小、放置的位置、是否可以拖动、是否可以最小化、可以在通知栏显示提示等等。
基于android手机的来电浮动窗口提醒,可标注来电人物、号码标注
浮动窗口按钮截图,学习浮动窗口,服务,调用system/bin/ shell命令使用方法
Android程序研发源码Android 视频浮动窗口源码.zip