Android 4.1.2 的开发者选项有个在屏幕覆盖层显示Cpu使用的,这个是怎么做到的?如何实现类似的效果?Java或者C都行的。android屏幕覆盖层

解决方案 »

  1.   

    用置顶的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);
    }
    }}
      

  2.   

    注意添加权限
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
      

  3.   

    有个pointLocationView.java.跟你的类似.也是开发者选项里面的,你可以看看代码