14

別のレイアウトを含むレイアウトがあります:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:orientation="vertical"
          android:id="@+id/layout1">

    <include layout="@layout/my_layout"/>
</LinearLayout>

含まれているレイアウトに RippleEffect と StateListAnimator を追加する必要があります。

例:

<include layout="@layout/my_layout"
          android:stateListAnimator="@anim/lift_up"
          android:background="@drawable/ripple_effect"/>

RippleEffect と StateListAnimator の両方が 100% 機能します。含まれているレイアウトを変更できません。したがって、インクルード タグまたは親レイアウト自体のいずれかでエフェクトを実行する必要がある理由です。

私は両方の手法を試しましたが、いずれも成功しませんでした。

アップデート

可能であれば、これをプログラムで停止する必要があります。

更新 2

次に、ビューがアニメーション化されたら、どのようにビューを高さのままにしますか?

4

2 に答える 2

3

ビューを見つけて適切なメソッドを呼び出して、ステート リスト アニメーターと背景を変更する必要があります。含まれているレイアウトのルート ビューで setClickable を呼び出す必要がある場合もあります。

LinearLayout layout1 = findViewById(R.id.layout1);
View root = layout1.getChildAt(0);

StateListAnimator sla = AnimatorInflater.loadStateListAnimator(context, R.anim.lift_up); 
root.setStateListAnimator(sla);
root.setBackground(R.drawable.ripple_effect);
于 2016-01-12T08:17:22.993 に答える
2

スレッドに基づいてAndroid XML Layout の「include」タグは本当に機能しますか? およびLayoutInflater.javaタグは、および属性<include>のみをサポートしているようです。したがって、コードを設定しても効果はありません。android:idlayout_*android:visibilitybackgroundstateListAnimator

@Stepaneのコードで以下の問題を修正するには:

メソッドは波及効果を適切に有効にしますが、SLA は起動されません。上昇が起こっているのが見えない

膨張したビューが透明な場合、立面図は表示されませんviewOutline。影を表示するには、ビューに不透明な色を設定または使用する必要があります。

ViewOutlineProvider ドキュメントからの抜粋:

シャドウ キャスティングとクリッピングに使用されるアウトラインをビューが構築するためのインターフェイス。

設定するoutlineProviderには、View#setOutlineProvider (ViewOutlineProvider プロバイダー)android:outlineProviderメソッドを使用するか、 xml タグを介して設定できます。

更新されたコード:

LinearLayout root =(LinearLayout) findViewById(R.id.container);
StateListAnimator sla = AnimatorInflater.loadStateListAnimator(this, R.animator.lift_up);
root.setStateListAnimator(sla);
root.setClickable(true);
root.setOutlineProvider(ViewOutlineProvider.PADDED_BOUNDS);
root.setBackground(ContextCompat.getDrawable(this, R.drawable.ripple_effect));

波紋効果.xml

<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:color="?android:colorAccent"
    tools:ignore="NewApi">
  <item>
    <shape
        android:shape="rectangle">
        <solid android:color="@android:color/transparent"/>            
        <!-- Doesn't require outlineProvider
        <solid android:color="@android:color/darker_gray"/>
        -->
    </shape>
  </item>
</ripple>

res/animator/lift_up.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item
      android:state_enabled="true"
      android:state_pressed="true">
    <objectAnimator
        android:duration="@android:integer/config_shortAnimTime"
        android:propertyName="translationZ"
        android:valueTo="48dp"/>
  </item>
  <item>
    <objectAnimator
        android:duration="@android:integer/config_shortAnimTime"
        android:propertyName="translationZ"
        android:valueTo="0dp"/>
  </item>
</selector>
于 2016-01-14T22:31:27.837 に答える