如何在渐变背景上恢复纹波效果

时间:2020-02-28 19:33:46

标签: xml android-layout xamarin xamarin.android

我正在做一个记事应用。我从设计开始,所以我还没有任何代码。我做了一个带有“ +”和渐变背景图像的按钮,但最终失去了波纹效果。我看到有些类似的问题,但我什么都不懂。 如何恢复波纹效果?目前,它仅在图像上起作用,但是我希望在整个按钮(包括背景)上起作用。

add_button_design.xml:

<?xml version="1.0" encoding="utf-8"?>
<layer-list
  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">

  <item>
    <shape>
      <gradient android:startColor="#706fd3" android:endColor="#34ace0" android:angle="45"/>
      <corners android:radius="50dp"/>
      <stroke android:width="1px" android:color="#227093"/>
    </shape>
  </item>

  <item>
    <bitmap android:src="@drawable/add_button_image"/>
  </item>

  <item>
    <ripple android:color="?android:attr/colorControlHighlight">
      <item android:drawable="@drawable/add_button_image"/>
    </ripple>
  </item>
</layer-list>

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:layout_width="match_parent"
    android:layout_height="match_parent" android:background="@color/colorPrimaryDark">

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


        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <Button
                android:layout_width="75dp"
                android:layout_height="75dp"
                android:layout_alignParentRight="true"
                android:layout_alignParentBottom="true"
                android:layout_margin="20dp"
                android:background="@drawable/add_button_design"/>
        </RelativeLayout>


    </FrameLayout>
</RelativeLayout>

我知道这可以看作是重复的问题,但是其他问题与我的计划不符。

2 个答案:

答案 0 :(得分:1)

请在您的selector标记中添加ripple。这里正在运行GIF。 enter image description here

这是代码。

   <layer-list
  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">

  <item>
    <shape>
      <gradient android:startColor="#706fd3" android:endColor="#34ace0" android:angle="45"/>
      <corners android:radius="50dp"/>
      <stroke android:width="1px" android:color="#227093"/>
    </shape>
  </item>

  <item>
    <bitmap android:src="@drawable/add_button_image"/>
  </item>

  <item>
    <ripple android:color="?android:attr/colorControlHighlight">
      <!--<item android:drawable="@drawable/add_button_image"/>-->

     <selector>
       <!-- unclick the background-->
        <item
            android:drawable="@drawable/add_button_image"
            android:state_pressed="false" />
     <!-- click the background-->
        <item
            android:drawable="@drawable/add_button_image"
            android:state_pressed="true" />
      </selector>
    </ripple>
  </item>
</layer-list>

答案 1 :(得分:0)

使用@Leon基数,我设法修复了它。只需将所有内容放入 Ripple 标签

<?xml version="1.0" encoding="utf-8"?>
<layer-list
 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">

  <item>
    <ripple android:color="?android:attr/colorControlHighlight">
      <item>
        <shape>
          <gradient android:startColor="#706fd3" android:endColor="#34ace0" android:angle="45"/>
          <corners android:radius="50dp"/>
          <stroke android:width="1px" android:color="#227093"/>
        </shape>
      </item>

      <item>
        <bitmap android:src="@drawable/add_button_image"/>
      </item>
    </ripple>
  </item>
</layer-list>