1

私のアプリには map fragment があります。マーカーをクリックすると、スライドアップアニメーションが画面の下から半分まで表示されます。もう一度マーカーをクリックするとスライドダウンします。

欲しいもの: スライドアップメニューは、クリック可能にするか、ゲーブルをドラッグして、画面の上部に移動できるようにする必要があります。より明確にするために、画面の半分にあるこのスライドアップメニューをクリックまたはドラッグすると、画面の上部に移動する必要があります。

これまでのところ、マーカーをクリックすると、スライドアップアニメーションが画面の半分に呼び出されます。:ここに画像の説明を入力

アニメーションコード:slide_up.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:propertyName="yFraction"
            android:valueType="floatType"
            android:valueFrom="1.0"
            android:valueTo="0.58"
            android:duration="@android:integer/config_mediumAnimTime"/>
    <objectAnimator
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:propertyName="alpha"
            android:valueType="floatType"
            android:valueFrom="0.58"
            android:valueTo="1.0"
            android:duration="@android:integer/config_mediumAnimTime"/>
</set>

slide_down.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:propertyName="yFraction"
            android:valueType="floatType"
            android:valueFrom="0.58"
            android:valueTo="1.0"
            android:duration="@android:integer/config_mediumAnimTime"/>
    <objectAnimator
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:propertyName="alpha"
            android:valueType="floatType"
            android:valueFrom="1"
            android:valueTo="0"
            android:duration="@android:integer/config_mediumAnimTime"/>
</set>

マーカー クリックでこのアニメーションを呼び出すアクティビティのコード:

 public void toggleList() {
        Fragment f = getFragmentManager().findFragmentByTag(LIST_FRAGMENT_TAG);

        if (f != null) {
            getFragmentManager().popBackStack();
        } else {
            getFragmentManager()
                    .beginTransaction()
                    .setCustomAnimations(R.anim.slide_up,
                            R.anim.slide_down,
                            R.anim.slide_up,
                            R.anim.slide_down)
                    .add(R.id.list_fragment_container, BaseMapSlidingFragment
                                    .instantiate(this, BaseMapSlidingFragment.class.getName()),
                            LIST_FRAGMENT_TAG
                    )
                    .addToBackStack(null).commit();
            googleMap.getUiSettings().setAllGesturesEnabled(false);
            if(animCheck == false){
                animCheck = true;
                }else
            {
                    animCheck= false;
            }


        }}

menu_Sliding.up.xml

<?xml version="1.0" encoding="utf-8"?>

<com.trickyandroid.fragmenttranslate.app.view.SlidingRelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="#7c7c7c">

    <ListView
            android:id="@android:id/list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

</com.trickyandroid.fragmenttranslate.app.view.SlidingRelativeLayout>

Custom_View :

  **package com.trickyandroid.fragmenttranslate.app.view;
    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.ViewTreeObserver;
    import android.widget.RelativeLayout;
    /**
     * Created by paveld on 4/13/14.
     */
    public class SlidingRelativeLayout extends RelativeLayout {
        private float yFraction = 0;
        public SlidingRelativeLayout(Context context) {
            super(context);
        }
        public SlidingRelativeLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
        public SlidingRelativeLayout(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }
        private ViewTreeObserver.OnPreDrawListener preDrawListener = null;
        public void setYFraction(float fraction) {
            this.yFraction = fraction;
            if (getHeight() == 0) {
                if (preDrawListener == null) {
                    preDrawListener = new ViewTreeObserver.OnPreDrawListener() {
                        @Override
                        public boolean onPreDraw() {
                            getViewTreeObserver().removeOnPreDrawListener(preDrawListener);
                            setYFraction(yFraction);
                            return true;
                        }
                    };
                    getViewTreeObserver().addOnPreDrawListener(preDrawListener);
                }
                return;
            }
            float translationY = getHeight() * fraction;
            setTranslationY(translationY);
        }
        public float getYFraction() {
            return this.yFraction;
        }
    }**

画面の半分にあるスライドアップメニューをクリックして、このメニューを画面の上部に表示する方法は?

4

1 に答える 1

1

ここにあるAndroidSlidingUpPanelライブラリを使用することをお勧めします。何度も同じことを書いても意味がありません。

それはあなたが必要とするものを持っています。使用と変更は簡単です (私は自分のプロジェクトで使用しています)。

使い方

  • com.sothree.slidinguppanel.SlidingUpPanelLayoutアクティビティ レイアウトにルート要素として含めます。
  • レイアウトでは、グラビティを上または下に設定する必要があります。
  • 2 つの子があることを確認します。最初の子はメイン レイアウトです。2 番目の子は、スライド アップ パネルのレイアウトです。
  • メイン レイアウトでは、幅と高さを に設定する必要がありmatch_parentます。
  • スライド レイアウトでは、幅を に設定しmatch_parent、高さを に設定するかmatch_parent、必要なwrap_content最大の高さに設定する必要があります。
  • デフォルトでは、パネル全体がドラッグ領域として機能し、クリックおよびドラッグ イベントをインターセプトします。setDragViewメソッドまたはumanoDragView属性を使用して、ドラッグ領域を特定のビューに制限できます。
于 2015-11-26T13:27:12.177 に答える