2012-10-23 31 views
3

我有一個帶有準備好按鈕的UI,當此按鈕點擊後臺服務時會被調用。我需要在主屏幕上設置位圖圖像,就像屏幕上的劃痕一樣。有沒有辦法做到這一點,而不會在活動中顯示佈局。或者,即使我們使用佈局在屏幕上顯示該圖像,然後我需要背景(主頁,按鈕和當前打開的所有其他東西)激活在主屏幕上使用後臺服務繪製位圖圖像

我已經附上上面的圖片作爲參考,你可以看到我想要的待辦事項。請幫幫我。您的關注將受到高度讚賞。

回答

0

這是一個遲到的答案,但可能是它可以節省別人一天...... :)

Permission : android.permission.SYSTEM_ALERT_WINDOW

class ScreenOverlayService extends Service { 
HUDView mView; 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.i("onStartCommand", "called....");  

    //  return android.app.Service.START_STICKY; // don't kill service... 
    return START_NOT_STICKY; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 

    mView = new HUDView(this); 

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
      WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, 
      PixelFormat.TRANSLUCENT); 

    params.gravity = Gravity.RIGHT | Gravity.TOP; 
    params.setTitle("Load Average"); 
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
    wm.addView(mView, params); 

} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 

    if(mView != null){ 
     ((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(mView); 
     mView = null; 
    } 
} 

class HUDView extends ViewGroup { 
    private Paint mLoadPaint; 
    Context context; 

    public HUDView(Context context_) 
    { 
     super(context_); 
     context = context_; 

     mLoadPaint = new Paint(); 
     mLoadPaint.setAntiAlias(true); 
     mLoadPaint.setTextSize(10); 
     mLoadPaint.setARGB(255, 255, 0, 0); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     //canvas.drawText("Hello World", 5, 15, mLoadPaint); 

     // Read the image 
     Bitmap markerImage = BitmapFactory.decodeResource(getResources(), R.drawable.pic1); 

     // Draw it, centered around the given coordinates 
     canvas.drawBitmap(markerImage, 
       screenPoint.x - markerImage.getWidth()/2, 
       screenPoint.y - markerImage.getHeight()/2, null); 

    } 

    @Override 
    protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) { 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     return super.onTouchEvent(event); 
    } 
} 

}