1

ウィンドウの調光に少し問題があります。基本的に、Activity を一方向にスワイプするとすぐに、DimAmount をゼロに設定したいと考えています。

私のアクティビティはダイアログとして表示され、左右にスワイプできることに注意してください。これは完全に正常に機能します。ただし、スワイプ後に 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);  
}

}

4

1 に答える 1

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();
    }
}
于 2013-02-28T22:34:25.163 に答える