12

私はこのようなビューを持っています

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Button"
    android:id="@+id/button"
    android:background="@drawable/ripple"
    android:layout_centerVertical="true"
    android:layout_alignParentStart="true" />

そしてripple.xmlとして

<?xml version="1.0" encoding="utf-8"?>
<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight" >

    <item android:id="@android:id/mask"
        android:drawable="@android:color/white" />

</ripple>

すべてがうまく機能します。ビューに触れると、波及効果が得られます。私が探しているのは、ビューでリップル アニメーションをコードから繰り返し開始することです。不確定な進歩としてそれを示すこと。そのため、波はさざなみを続けています。

何かのようなもの

 Runnable runnable = new Runnable() {
    @Override
    public void run() {
        RippleDrawable drawable = (RippleDrawable) button.getBackground();
        drawable.showRipples(true, true); // <-- This is needed

        handler.postDelayed(runnable, 500);
    }
};

これを行う方法?

4

1 に答える 1

18

RippleDrawable押された状態とフォーカスされた状態に応答し、前者は探しているリップル アニメーションを提供します。を使用して、ホスト ビューで押された状態を切り替えることができますView.setPressed(boolean)

Runnable pressRunnable = new Runnable() {
    @Override
    public void run() {
        button.setPressed(true);
        button.postOnAnimationDelayed(unpressRunnable, 250);
    }
};

Runnable unpressRunnable = new Runnable() {
    @Override
    public void run() {
        button.setPressed(false);
        button.postOnAnimationDelayed(pressRunnable, 250);
    }
};

ユーザーが に触れるとButton、押された状態もトグルされることに注意してくださいOnTouchListener

必要に応じて、ビュー相対座標を使用してDrawable.setHotspot(float, float)、または API 22 以降でリップルの位置を制御できます。View.dispatchDrawableHotspotChanged(float, float)(x, y)

于 2015-03-15T07:24:06.363 に答える