0

私のゲームでは、Fragmentどのプレイヤーがプレイする必要があるかを示す全画面表示があります。

Fragmentプレーヤーは、画面の半分以上 (左または右) を水平方向にスワイプして、プレイできるようにする必要があります。

これが私のFragmentコードです:

public class PopPlayerFragment extends Fragment implements View.OnTouchListener{
[...]
private float mMaxSlide;
private float mInitialMotionX;
private float mActualMotionX;
private float mLastMotionX;
[...]
public View onCreateView (LayoutInflater inflater, ViewGroup container, [...]){
    View v = inflater.inflate(R.layout.pfragment, container, false);
    mMaxSlide = getActivity().getApplicationContext()
                .getResources().getDisplayMetrics().widthPixels / 2;
    [...]
    v.setOnTouchListener(this);
    return v;
}

@Override
public boolean onTouch(View v, MotionEvent event){
    switch(event.getAction()){
        case MotionEvent.ACTION_DOWN:
            mInitialMotionX = event.getX();
            return true;
        case MotionEvent.ACTION_MOVE:
            mActualMotionX = event.getX();
            final float dx = mActualMotionX - mInitialMotionX;
            final float adx = Math.abs(dx);
            v.setX(v.getX() + dx);
            if(adx <= mMaxSlide)
                v.setAlpha(1.0f - (adx / mMaxSlide));
            else
                v.setAlpha(0.0f);
            return true;
        case MotionEvent.ACTION_UP:
            mLastMotionX = event.getX();
            final float adxup = Math.abs(mLastMotionX - mInitialMotionX);
            if(adxup >= mMaxSlide){
                getFragmentManager().beginTransaction().hide(this).commit();
            } else{
                v.setX(0.0f);
                v.setAlpha(1.0f);
            }
            return true;
        default: return false;
    }
}

指を動かすFragmentのと同じように動かし、1 から 0 にフェードさせたいです。

たとえば、幅 800px のデバイスでは、mMaxSlide = 400 なので、画面に触れるとFragmentのアルファは 1.0 になり、200px をスワイプするとアルファ = 0.5 になります。

がmMaxSlideFrgamentを超えて移動した場合は非表示にします。それ以外の場合は、完全な不透明度で最初の位置に戻ります。

問題は、これをテストすると次のようになることです。

  • 右のスワイプはFragment指で動くので問題ありませんが、フェードアウトすることはなく(非常に速くスワイプした場合を除く)、常に最初の位置に戻ります..
  • mActualMotionXが大幅に増加するため、左スワイプがまったく機能しません。少し動かすと、Fragmentが遠くにスライドします。

私は何を間違っていますか?

4

1 に答える 1

0

私は自分の質問に答えます:

触れたまま動かさないFragmentとフェードアウトが効くので、聞いているものを動かさないように、レイアウトの一部だけを動かさなければなりませんでした。

私のレイアウトはFrameLayoutフルスクリーンの で構成さRelativeLayoutれているので、リスナーは に設定され、彼FrameLayoutの子を持つ のみがRelativeLayout必要に応じて移動およびフェードします:p

于 2013-10-23T23:48:11.907 に答える