【问题标题】:Drop shadow animation on ViewPager when pressed按下时在 ViewPager 上放置阴影动画
【发布时间】:2015-02-26 01:54:56
【问题描述】:

我希望我的 ViewPager 具有与 Material Design 主题 Button 相同的 Material Design 动画,当您按下它时,您会看到海拔变化,并且按钮下方会出现阴影。效果在材料响应视频下的材料设计指南中显示在这里:http://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-user-input

我相信对于 Button/ImageView,这是通过 StateListAnimator 完成的,但我无法找到对 ViewPager 执行相同操作的方法,因为 ViewPager 似乎没有按钮所具有的状态。

我尝试在自定义 ViewPager 上使用 onInterceptTouch 和 onTouch 来监听何时按下和释放 ViewPager,但根据我的实验,并非所有 MotionEvents 都会发送到 ViewPager。

我也尝试使用 PageTransformer,但效果有限。

有人知道怎么做吗?

【问题讨论】:

  • 如何让您的 ViewPager 项目按钮,然后让它们可点击,这样 StateListAnimator 现在将应用于您的项目?
  • 按钮不是 ViewGroup,因此它们不能包含任何内容。
  • 你可以把它放在 FrameLayout 或 RelativeLayout 中,对吧?只要点击事件到达Button,我的猜测是效果会应用到它。
  • ViewPagers 并不是真的打算这样做,但我可以想到一些方法来实现这一点,但我不推荐它。我假设您有一个可以滚动的水平项目列表,一次只能查看一个,但您还想选择/单击这些项目并在单击时执行一些操作?如果这些项目不仅仅是愚蠢的内容,那么ViewPager 可能是要走的路。否则,如果用户只是在一个简单的可选项目列表中滚动,那么你最好使用水平的RecyclerView 和可能的自定义LayoutManager

标签: android android-viewpager android-animation material-design


【解决方案1】:

您必须编辑您的项目布局。将此添加到 Button/View/ImageView:

android:stateListAnimator="@anim/item_elevation"

然后添加这个动画(例如anim/item_elevation.xml)。假设您的初始高度为 1dp:

<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:valueFrom="1dip"
        android:valueTo="3dip"
        android:valueType="floatType" />
</item>
<item>
    <objectAnimator
        android:duration="@android:integer/config_shortAnimTime"
        android:propertyName="translationZ"
        android:valueFrom="3dip"
        android:valueTo="1dip"
        android:valueType="floatType" />
</item>

注意:如果您想产生涟漪效果,请添加: android:background="?android:selectableItemBackground" (默认) 或 android:background="?selectableItemBackground" (AppCompat)

【讨论】:

  • 我已经尝试过了,但我正在尝试将其添加到 ViewPager,afaik 没有这些状态,因此不会被拾取。
  • 这确实有效,但当您将其应用于 Button/ImageView,而不是 ViewPager。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 2020-12-01
相关资源
最近更新 更多