码迷,mamicode.com
首页 > 移动开发 > 详细

Android桌面悬浮窗

时间:2015-02-25 22:15:00      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:

经常,我们看到在桌面上可移动的悬浮窗,这种场景还是很多的, 像流量统计,桌面歌词等,安全软件的清理小部件

这种小部件主要是通过 WindowManager ; WindowManager.LayoutParams 这两个类来实现

调用 WindowManager 的addView(view, params)方法来添加一个悬浮窗.updateViewLayout(view,params)来更新悬浮窗参数.removeView(view)用于移除悬浮窗

WindowManager.LayoutParams 主要是用来提供参数的

其中的参数有type: 悬浮窗的类型,通常设置为2002, 即在所有程序之上.状态栏之下

flags :用于确定悬浮窗的行为

gravity : 用于确定悬浮窗的对其方式

x: 悬浮窗的横向坐标

y: 悬浮窗的纵向坐标

width: 悬浮窗的宽度

height : 悬浮窗的高度

创建悬浮窗需要添加权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

 

悬浮窗布局

 

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/small_window_layout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/bg" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="拖拽移动.."
        android:textSize="20sp" />

</LinearLayout>

 

新建一个类继承Application,Application就是应用的入口点,写在这里,就是程序一运行,就会出来

同时,需要在清单文件的Application结点上配置名称

package com.example.windowmanagerdemo;

import android.annotation.SuppressLint;
import android.app.Application;
import android.content.Context;
import android.graphics.PixelFormat;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;

public class MAppliction extends Application {
    WindowManager mWM;

    WindowManager.LayoutParams mParams;

    @Override
    public void onCreate() {
        super.onCreate();
        mWM = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
        mParams = new WindowManager.LayoutParams();
        final View mwm = LayoutInflater.from(this).inflate(R.layout.mwm, null);

        mwm.setOnTouchListener(new OnTouchListener() {
            float lastX, lastY;

            @SuppressLint("NewApi")
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    lastX = event.getX();
                    lastY = event.getY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    float moveX = event.getX();
                    float moveY = event.getY();
                    mParams.x += (int) (moveX - lastX);
                    mParams.y += (int) (moveY - lastY);
                    mWM.updateViewLayout(mwm, mParams);
                    break;
                default:
                    break;
                }
                return true;
            }
        });

        mParams.type = LayoutParams.TYPE_PHONE;
        mParams.format = PixelFormat.RGBA_8888;
        mParams.width = 50;
        mParams.height = 30;
        mWM.addView(mwm, mParams);
    }
}

Android桌面悬浮窗

标签:

原文地址:http://www.cnblogs.com/BoBoMEe/p/4300096.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!