天天看點

android筆記之可拖動的不要權限的懸浮框

<span style="font-size:24px;color:#ff6666;">調用的話直接調用begin方法就可以了,自己的筆記沒有太多解釋,代碼很簡單的</span>
           
package com.tianxia.administrator.chuanganqi;

import android.animation.ObjectAnimator;
import android.content.Context;
import android.graphics.PixelFormat;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * Created by Administrator on 16-9-27.
 */
public class XuanFuKuang {
   private WindowManager wManager;
   private boolean is_begin;
    private Context context;
    private int w=140;
    private int h=140;
    private View view;
    private  WindowManager.LayoutParams wmParams;
    private int startx;
    private int starty;
    private ImageView image001;
    private TextView text;

    public XuanFuKuang(Context context) {
        this.context = context;
        wManager = (WindowManager) context.getApplicationContext()
                .getSystemService(Context.WINDOW_SERVICE);
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(android.content.Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.xuanfukuang, null);
        image001= (ImageView) view.findViewById(R.id.image002);
        text= (TextView) view.findViewById(R.id.text001);
        initView();
        initparams();
    }

    private void initparams() {
        wmParams = new WindowManager.LayoutParams();
        // 設定視窗的類型這裡如果設定成TYPE_PHONE,那麼需要權限,設定成Type_tosast不需要權限就可運作,但是可能在19版本以下的
        //版本會有問題,這裡可以判斷一下版本,大于19就用TYPE_TOAST
        wmParams.type = WindowManager.LayoutParams.TYPE_TOAST;

        // 設定行為選項
        wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
        wmParams.format = PixelFormat.RGBA_8888;
        wmParams.dimAmount = 0.5f;
        wmParams.gravity= Gravity.TOP|Gravity.LEFT;
        wmParams.x=0;
        wmParams.y=0;
        // 設定懸浮視窗長寬資料
        wmParams.width = w;
        wmParams.height = h;
    }

    public synchronized void begin() {
        if (!is_begin) {
            is_begin = true;
            wManager.addView(view, wmParams);
        }
    }


    //關閉懸浮框
    public synchronized void release() {
        if (is_begin) {
            wManager.removeView(view);
            is_begin = false;
        }
    }

    /**
     * 傳回是否開啟
     */
    public boolean isBegin(){
        return is_begin;
    }

    private void setParms(int x,int y){
        wmParams.x=x;
        wmParams.y=y;
    }
    private void  initView() {
        view.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                float x = event.getRawX();
                float y = event.getRawY();
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        startx= (int) event.getX();
                        starty= (int) event.getY();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        setParms((int) x-startx, (int) y-starty);
                        wManager.updateViewLayout(view, wmParams);
                        break;
                }
                return true;
            }
        });
    }

    public void xuanzhuan(float start,float end,String str){
        ObjectAnimator.ofFloat(image001, "rotation", start, end)//
                .setDuration(100)//
                .start();
        text.setText(str+"");
    }
}