2015-11-30 87 views
1

我正在研究我的Android演示,當點擊某個按鈕時它將啓動一個浮動窗口。然後,通過單擊浮動窗口,窗口本身將隱藏,直到當前顯示的窗口的屏幕截圖被採用,然後顯示它自己。爲什麼我的View.setVisibility(View.INVISIBLE)方法無法按時運行?

基本上,點擊浮動窗口 - 隱藏自己 - 採取截圖 - 顯示自己

我谷歌搜索,並設法編寫一些代碼,使其工作。有一些奇怪的地方:每當我點擊浮動窗口時,窗口本身並沒有按時消失,即我的每個屏幕截圖都包含窗口的視圖。

該序列似乎變成單擊浮動窗口 - 採取截圖 - 隱藏自己 - 顯示自己。它不應該表現得像這樣!

驗證碼:

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

    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 
    floatIcon = new ImageView(this); 
    floatIcon.setImageResource(R.drawable.floating); 

    final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_PHONE, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
      PixelFormat.TRANSLUCENT); 

    params.gravity = Gravity.TOP | Gravity.LEFT; 
    params.x = 0; 
    params.y = 100; 

    windowManager.addView(floatIcon, params); 

    try { 
     floatIcon.setOnTouchListener(new View.OnTouchListener() { 
      private WindowManager.LayoutParams paramsF = params; 
      private int initialX; 
      private int initialY; 
      private float initialTouchX; 
      private float initialTouchY; 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       switch (event.getAction()) { 
        case MotionEvent.ACTION_DOWN: 
         // Get current time in nano seconds. 
         long pressTime = System.currentTimeMillis(); 

         // If double click...(click interval should be longer than 2000) 
         if (pressTime - lastPressTime <= 2000) { 
//        createNotification(); 
//        ServiceFloating.this.stopSelf(); 
          mHasDoubleClicked = true; 
         } else { 
          mHasDoubleClicked = false; 
         } 
         lastPressTime = pressTime; 
         initialX = paramsF.x; 
         initialY = paramsF.y; 
         initialTouchX = event.getRawX(); 
         initialTouchY = event.getRawY(); 
         break; 
        case MotionEvent.ACTION_UP: 
         if (!mHasDoubleClicked && !mHasMoved) { 
          if (rootUtil == null) { 
           rootUtil = RootUtil.getInstance(); 
          } 

          while (floatIcon.isShown()) { 
           try { 
            Thread.sleep(300); 
            floatIcon.setVisibility(View.INVISIBLE); 
           } catch (InterruptedException e) { 
            e.printStackTrace(); 
           } 
          } 

          Vibrator vb = (Vibrator) getSystemService(VIBRATOR_SERVICE); 
          vb.vibrate(100); 

          String tempFileName = String.valueOf(System.currentTimeMillis()); 
          rootUtil.execute("screencap -p /sdcard/" + tempFileName + ".png"); 
         } 
         floatIcon.setVisibility(View.VISIBLE); 
         break; 
        case MotionEvent.ACTION_MOVE: 
         paramsF.x = initialX + (int) (event.getRawX() - initialTouchX); 
         paramsF.y = initialY + (int) (event.getRawY() - initialTouchY); 
         windowManager.updateViewLayout(floatIcon, paramsF); 
         if ((int) (event.getRawX() - initialTouchX) < 3 && (int) (event.getRawY() - initialTouchY) < 3) { 
          mHasMoved = false; //Move distance within 3 is not recognized as a real move 
         } else { 
          mHasMoved = true; 
         } 
         break; 
       } 
       return false; 
      } 
     }); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 

我困在這裏好幾天。真的很感激,如果有人可以幫助或給我一個提示。

Ps。 我不明白爲什麼沒有人似乎對這個問題感興趣,是因爲這個問題根本不值得回答,或者只是我在這裏以錯誤的方式/方式提問?

+0

有人知道原因嗎?我做了幾個其他的實驗,沒有一個能工作。 –

回答

0

[更新]

雖然沒有人回答我的問題後一個星期左右。我設法解決了這個問題,現在我想在這裏發佈解決方案,以防將來遇到同樣的問題。

我沒有解決點擊浮動窗口的問題 - 隱藏自己 - 採取截圖 - 顯示自己序列與的AsyncTask實施由Android提供。

在AsyncTask的onPreExecute()方法中,我把隱藏浮動窗口的代碼放在裏面。

在AsyncTask的doInBackground()方法中,我把截屏的代碼放在裏面。

在AsyncTask的onPostExectue()方法中,我把顯示浮動窗口的代碼放在裏面。

然後在我的onCreate()onTouch()方法中,只需初始化AsyncTask並執行它。

一切正如我所料,我不知道爲什麼以前的代碼不工作。我嘗試啓動一個新的Thread並使用Thread.join來等待截圖的線程'完成,然後顯示浮動窗口,即使這不起作用),但AsyncTask的作品。

只希望這會幫助某人,我希望有人可以向我解釋。

0

這個答案可能對某人有幫助,我也遇到過這個問題。但在我的情況下,我使用RotateAnimation來查看。如果我評論RotateAnimation代碼,則View.INVISIBLE正在工作。

相關問題