2013-02-28 4 views
1

내 창 조광에 약간의 문제가 있습니다. 기본적으로 내 액티비티의 dimAmount를 한 방향으로 스 와이프하자마자 0으로 설정하고 싶습니다.설정 창 Dim only on on create()

내 활동이 대화 상자로 표시되며 왼쪽 또는 오른쪽으로 스 와이프 될 수 있습니다. 이것은 완벽하게 작동합니다. 그러나 setWindowDim() 메서드는 스 와이프 후에 호출 할 때 아무런 효과가 없습니다.

내 onCreate 메서드 내에서 setWindowDim을 호출하면 완벽하게 작동합니다. 왜 다른 곳에서도 작동하지 않는 이유는 알 수 없습니다. 나는 창 희미한 마침내 일을 했어 변경 직후에이 활동을 시작

public class FinishDialog extends Activity { 

private FrameLayout frame = null; 
private GestureDetector gd = null; 
private int displaywidth = 0; 

private int original_x = 0; 
private int dialog_width = 0; 

private final int POS_LEFT = -1; 
private final int POS_MID = 0; 
private final int POS_RIGHT = 1; 

/** the dialogs current position, POS_MID on startup */ 
private int current_pos = POS_MID; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    //this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 

    frame = new FrameLayout(this); 
    gd = new GestureDetector(this, new TouchManager(this)); 

    // fill the challenge layout into the framelayout 
    frame.addView(LayoutInflater.from(getBaseContext()).inflate(R.layout.finishdialog, null)); 

    setContentView(frame);  

    FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) frame.getLayoutParams(); 

    GameLogic g = new GameLogic(); 

    displaywidth = g.getDisplayWidth(this); 

    lp.width = displaywidth - displaywidth/6; 
    lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL; 

    LinearLayout llFinish = (LinearLayout) findViewById(R.id.llFinishDialog); 

    LinearLayout.LayoutParams lpLL = (LinearLayout.LayoutParams) llFinish.getLayoutParams(); 
    lp.height = lpLL.height; 

    frame.setLayoutParams(lp); 

    // setWindowDim(0.0f); ---> if i set the dim here, it works perfectly fine 

    original_x = (int) frame.getX(); 
    dialog_width = lp.width; 
} 

private void setWindowDim(float dim) { 

    Log.i("FinishDialog", "Setting window dim to " + dim + "."); 

    WindowManager.LayoutParams lpWin = getWindow().getAttributes(); 
    lpWin.dimAmount = dim; 
    getWindow().setAttributes(lpWin); 
} 

/** 
* move the dialog, depending on the swipe direction and the 
* current position of the dialog 
* @param action 
*/ 
public void interpretTouch(int action) { 

    switch(action) { 
    case TouchManager.MOVE_DIALOG_RIGHT: 

     if(frame != null) { 

      if(current_pos == POS_MID) { 

       swipeDialog(600, frame, 0, dialog_width, 0, 0); 
       current_pos = POS_RIGHT; 
       setWindowDim(0.0f); // here setting the dim has no effect 

      } else if (current_pos == POS_LEFT) { 

       swipeDialog(600, frame, - dialog_width, original_x, 0, 0); 
       current_pos = POS_MID; 
       setWindowDim(0.9f); // here setting the dim has no effect 

      } else if (current_pos == POS_RIGHT) { 
       // if we are on the right and swipe right, nothing happens 
      } 
     } 

     Log.i("Challenge", "Moving dialog to the right."); 
     break; 
    case TouchManager.MOVE_DIALOG_LEFT: 

     if(frame != null) { 

      if(current_pos == POS_MID) { 

       swipeDialog(600, frame, 0, -dialog_width, 0, 0); 
       current_pos = POS_LEFT; 
       setWindowDim(0.0f); // here setting the dim has no effect 

      } else if (current_pos == POS_LEFT) { 

       // if we are on the left and swipe left, nothing happens 
      } else if (current_pos == POS_RIGHT) { 

       swipeDialog(600, frame, dialog_width, original_x, 0, 0); 
       current_pos = POS_MID; 
       setWindowDim(0.9f); // here setting the dim has no effect 
      } 
     } 

     Log.i("Challenge", "Moving dialog to the left."); 
     break; 
    } 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) {  

    return gd.onTouchEvent(event); 
} 

private void swipeDialog(int time, View framelayout, int fromDeltaX, int toDeltaX, int fromDeltaY, int toDeltaY) { 

    Log.i("FinishDialog", "Dialog swiped."); 

    TranslateAnimation trans = new TranslateAnimation(fromDeltaX, toDeltaX, 
      fromDeltaY, toDeltaY); 

    trans.setFillAfter(true); 
    trans.setFillEnabled(true); 
    trans.setDuration(time); 
    framelayout.startAnimation(trans); 
} 

}

+0

* "setContentView()"를 호출하기 전에 윈도우 플래그 만 설정하고 결과를 볼 수 있기 때문에 "onCreate()"에서 * 작동하는 이유는 아마도 *입니다. 빠른 수정에 관해서는, 당신이 [이] (http://stackoverflow.com/a/7658364/1815485) 대답과 같은 새로 고침 활동을 할 수있을 것 같아요. –

+1

onCreate 코드를 보면 콘텐트 뷰를 설정 한 후에도 창을 흐리게 설정할 수 있으며 여전히 작동한다는 것을 알 수 있습니다. 그게 내가 왜 그렇게 혼란스러워하는지 그 이유는 다른 곳에서는 작동하지 않습니다. –

답변

0

. 불행히도 RefreshActivity가 시작되면 화면이 꽤 "추악한"상태로 깜박입니다. 누구나 해결책이 있습니까?

import android.app.Activity; 
import android.os.Bundle; 

public class RefreshActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     finish(); 
    } 
}