首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RippleDrawable未绘制视图

RippleDrawable未绘制视图
EN

Stack Overflow用户
提问于 2015-05-15 14:23:50
回答 2查看 3K关注 0票数 1

我有一个带有KenBurnsView和ImageView的布局(只是一个切换按钮)。当我单击该按钮时,会生成一个脉动,但它会绘制在KenBurnsView下面。

以前,当我有一个图像视图替换为KenBurnsView时,在顶部的ImageView上画出了波纹图。

这是我的布局:

代码语言:javascript
复制
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/background"
    android:clickable="true"
    android:orientation="vertical">


    <RelativeLayout
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="@dimen/nav_drawer_header_height">

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <com.flaviofaria.kenburnsview.KenBurnsView
                android:id="@+id/header_cover"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:src="@drawable/cover_1" />

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <ImageView
                    android:id="@+id/header_toggle"
                    android:layout_width="50dp"
                    android:layout_height="30dp"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentRight="true"
                    android:layout_marginBottom="10dp"
                    android:layout_marginRight="10dp"
                    android:padding="10dp"
                    android:src="@drawable/toggle_down" />

            </RelativeLayout>

        </FrameLayout>

    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/nav_toggle_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"></RelativeLayout>

</LinearLayout>

这是我的可纹章的可绘制XML:

代码语言:javascript
复制
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@android:color/white"
    android:drawSelectorOnTop="true"> <!-- ripple color -->

</ripple>

这就是我是如何增加涟漪的:

代码语言:javascript
复制
toggle.setBackground(getResources().getDrawable(R.drawable.ripple));

波普尔在KenBurnsView下面的鼓点有什么问题呢?当有一个ImageView代替KenBurnsView时,它过去工作得很好吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-15 14:40:01

从您自己的代码('setBackground')中可以看到,您正在将波纹设置为一个背景,这就是为什么要在背景上绘制它。

android 21上的ImageView为波纹式的android:drawSelectorOnTop="true"添加了这个“黑客”。但是你使用的库并没有添加相同的黑客。

你的代码本身没有什么问题。但是这种行为不能由第三方库的Android团队来保证。

在这里,您可以选择以下几个选项,这些选项将在清洁、工作和性能方面有所不同:

  1. 检查ImageView源代码,克隆库,添加与其上使用的图像视图相同的攻击。在它正常工作之后,确保将请求拉回库。
  2. 用一个KenBurnsView包装您的FrameLayout,并在FrameLayout上使用setForeground设置波纹。
  3. 克隆库,将选项添加到前台可绘制(类似于此How to set foreground attribute to other non FrameLayout view)。还请确保将此可评估代码的请求拉回库。
票数 1
EN

Stack Overflow用户

发布于 2015-05-15 21:38:07

无限的涟漪投射到祖先视图的第一个可用背景上。从承载波动的ImageView中跟踪视图层次结构,您将发现第一个可用的背景是在带有标识符drawerLinearLayout上。

如果您在包含您的RelativeLayoutImageView上设置了一个透明的背景,那么第一个可用的背景将呈现在同级视图之上,您将获得所需的效果。

另外要注意的是,RelativeLayout应该用一个FrameLayout来代替,这样就可以用一个更便宜的布局传递来提供同样的效果。

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

https://stackoverflow.com/questions/30261947

复制
相关文章

相似问题

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