当前位置: 代码迷 >> Android >> 怎么在屏幕最上层绘图
  详细解决方案

怎么在屏幕最上层绘图

热度:64   发布时间:2016-04-28 07:54:10.0
如何在屏幕最上层绘图?
Android 4.1.2 的开发者选项有个在屏幕覆盖层显示Cpu使用的,这个是怎么做到的?如何实现类似的效果?Java或者C都行的。
android 屏幕覆盖层

------解决方案--------------------
用置顶的activity
import android.app.Activity;
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.view.WindowManager.LayoutParams;

public class FlowView {
private WindowManager wm=null;
private WindowManager.LayoutParams wmParams=null;
protected View view = null;
private float x,y,startX,startY;
private int TOOL_BAR_HIGH = 0;
    public FlowView(int viewid,Activity act){
     //获取WindowManager
        wm=(WindowManager)act.getApplicationContext().getSystemService("window");
        //设置LayoutParams(全局变量)相关参数
        wmParams = new WindowManager.LayoutParams();
        
        wmParams.type=LayoutParams.TYPE_PHONE;   //设置window type
        //wmParams.format=PixelFormat.RGBA_8888;   //设置图片格式,效果为背景透明
         //设置Window flag
        wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL 
                         
------解决方案--------------------
 LayoutParams.FLAG_NOT_FOCUSABLE;

        //以屏幕左上角为原点,设置x、y初始值
        wmParams.x=0;
        wmParams.y=0;
        //设置悬浮窗口长宽数据
        TOOL_BAR_HIGH = 200;
        wmParams.width=LayoutParams.WRAP_CONTENT;
        wmParams.height=LayoutParams.WRAP_CONTENT;
      //调整悬浮窗口
        wmParams.gravity=Gravity.LEFT
------解决方案--------------------
Gravity.CENTER_VERTICAL;
        //显示myFloatView图像
        
        view = LayoutInflater.from(act).inflate(viewid, null);
        wm.addView(view, wmParams);
    }
    public void destroy(){
     if(view!=null){
     wm.removeView(view);
     }
    }
    public boolean onTouchEvent(MotionEvent event) {
     //触摸点相对于屏幕左上角坐标
     x = event.getRawX();
     y = event.getRawY() - TOOL_BAR_HIGH;
     //Log.d(TAG, "------X: "+ x +"------Y:" + y);
     switch(event.getAction()) {
     case MotionEvent.ACTION_DOWN:
     startX = event.getX();
     startY = event.getY();
     break;
     case MotionEvent.ACTION_MOVE:
     updatePosition();
     break;
     case MotionEvent.ACTION_UP:
     updatePosition();
     startX = startY = 0;
     break;
     }
     return true;
    }
//更新浮动窗口位置参数
private void updatePosition(){
if(view!=null){
// View的当前位置
wmParams.x = (int)( x - startX);
wmParams.y = (int) (y - startY);
wm.updateViewLayout(view, wmParams);
}
}

}

------解决方案--------------------
有个pointLocationView.java.跟你的类似.也是开发者选项里面的,你可以看看代码
  相关解决方案