首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RippleDrawable -以编程方式显示波纹效应

RippleDrawable -以编程方式显示波纹效应
EN

Stack Overflow用户
提问于 2015-03-15 06:12:25
回答 1查看 9.7K关注 0票数 13

我有这样的看法

代码语言:javascript
复制
<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作为

代码语言:javascript
复制
<?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>

一切都很好。当我触摸视图时,它会给我带来波纹效应。我想要的是从代码中反复启动视图上的纹章动画。表现为一种不确定的进步。所以海浪还在荡漾。

有点像

代码语言:javascript
复制
 Runnable runnable = new Runnable() {
    @Override
    public void run() {
        RippleDrawable drawable = (RippleDrawable) button.getBackground();
        drawable.showRipples(true, true); // <-- This is needed

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

怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-15 07:24:06

RippleDrawable响应按下状态和聚焦状态,前者给出了您要寻找的纹章动画。您可以使用View.setPressed(boolean)在主机视图上切换按下状态。

代码语言:javascript
复制
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)坐标来控制波纹位置。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29057803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档