2017-11-20 14 views
1

전체 창에 세 개의 단추가 있습니다. 이 모든 버튼들에 대해서만 그림자를 추가해야합니다. 1) 메인 배경 버튼의 색상 및 2) 기울기단추의 아래쪽 그림자 만 추가하는 방법

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape android:shape="rectangle"> 
      <solid android:color="@color/colorPrimary"/> 
      <size android:height="30dp"/> 
    </shape> 
</item> 
<item> 
    <shape android:shape="rectangle"> 
     <gradient 
      android:startColor="#0000" 
      android:endColor="#9444" 
      android:type="linear" 
      android:angle="90"> 
     </gradient> 
     <size android:height="5dp"/> 
    </shape> 
</item> 
</layer-list> 

은 이제 단지 colorPrimary (주 배경색 참조) :

<?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"> 

<LinearLayout 
    android:id="@+id/buttons_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    > 

    <ImageButton 
     android:id="@+id/gath" 
     android:layout_width="0dp" 
     android:layout_height="35dp" 
     android:layout_weight="1" 
     app:srcCompat="@drawable/ic_gath" 
     android:background="@drawable/button_shadow" 
     android:layout_marginTop="40dp" 
     /> 

    <ImageButton 
     android:id="@+id/foll" 
     android:layout_width="0dp" 
     android:layout_height="35dp" 
     android:layout_weight="1" 
     app:srcCompat="@drawable/ic_foll" 
     android:background="@drawable/button_shadow" 
     android:layout_marginTop="40dp" 
     /> 

    <ImageButton 
     android:id="@+id/del" 
     android:layout_width="0dp" 
     android:layout_height="35dp" 
     android:layout_weight="1" 
     app:srcCompat="@drawable/ic_del" 
     android:background="@drawable/button_shadow" 
     android:layout_marginTop="40dp" 
     /> 
</LinearLayout> 
</RelativeLayout> 

나는 두 부분에서의 계층에서 분할 만든 아무것도. 높이를 사용하려고했지만 오른쪽과 왼쪽 그림자를 삭제할 수 없습니다.

감사합니다. 그는 완벽한 해결책을 찾았습니다. 비슷한 해결책을 찾았습니다 :

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
     android:left="0dp" 
     android:right="0dp" 
     android:top="30dp" 
     android:bottom="0dp"> 
     <shape android:shape="rectangle"> 
      <gradient 
       android:startColor="#0000" 
       android:endColor="#9444" 
       android:type="linear" 
       android:angle="90"> 
      </gradient> 
     </shape> 

    </item> 
     <item 
      android:left="0dp" 
      android:right="0dp" 
      android:top="0dp" 
      android:bottom="5dp"> 
      <shape android:shape="rectangle"> 
       <solid android:color="@color/colorAccent"/> 
      </shape> 
     </item> 
</layer-list> 

답변

1

And for Button.. 
나는 당신을 위해 가장 쉬운 이런 식으로 뭔가에 button_shadow.xml을 변경하는 것입니다 생각 :

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
      <size android:height="30dp" /> 
      <solid android:color="#FFFF0000" /> 
     </shape> 
    </item> 
    <item android:top="30dp"> 
     <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
      <size android:height="5dp" /> 
      <solid android:color="#FF000000" /> 
      <gradient 
       android:angle="90" 
       android:endColor="#FF888888" 
       android:startColor="#FF000000" 
       android:type="linear" /> 
     </shape> 
    </item> 
</layer-list> 

그래디언트 시작 및 종료 색상으로 재생할 수 있습니다. ImageButton이 총 높이 35dp로 설정되고 button_shadow.xml의 android : top이 30dp로 설정된 경우 총 높이 5dp로 표시됩니다. 시작 및 끝 색상에 따라 그림자 아래에서 버튼이 조금씩 움직이거나 보이도록 설정할 수 있습니다. 내 가상 장치에

는 이제 다음과 같습니다

Red ImageButton with white to black gradient below

+0

이 솔루션은 아래에 쓴 것과 동일한 문제가 있습니다. 이미지 버튼 아이콘 만 배경이 아닙니다. – Delphian

+0

질문을 이해합니다. 내 대답에 적응했다. 한번보세요. 이미지 버튼이 35dp 높이로 설정된 경우 예를 들어 그림자로 첫 번째 모양을 만듭니다. 높이가 30입니다.그 아래에서 android : top이 버튼의 색상 부분에 설정된 두 번째 모양을 만들고 그림자 그라디언트에 나머지 5dp를 사용하십시오. – Jenever

+0

Jenever, 감사합니다. 이 솔루션은 완벽하게 작동합니다. 현재로서는 귀하의 솔루션과 비슷한 솔루션을 발견했습니다. – Delphian

0

모든 API 수준에서 그림자를 그리기 위해 라이브러리를 검색하는 것이 좋습니다. this one을 사용하여 내 그림자를 채색하고 내보기 아래에서만 만들었습니다. 필요에 따라 변경할 수 있습니다.

+0

이 라이브러리는 나쁜 삼년 업데이트하지 않습니다. 이 시간 동안 많은 기능이 등장했습니다. – Delphian

+0

@ 델 피언 어떤 기능? :) 그런데 그림 뷰에는 새로운 것이 없습니다. –

+0

고도가있는 Android Lollipop 및 ViewOutlineProvider. 정확히 3 년 전에 등장했지만 롤리팝 출시 (Novemver 2014) 전에 라이브러리가 분명하게 생성되었습니다. – Delphian

2
try this.. 

<?xml version="1.0" encoding="utf-8"?> 
 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
 
    <item android:state_enabled="true"> 
 
     <layer-list> 
 
      <item android:top="-10dp" android:left="-10dp" android:right="-10dp"> 
 
       <shape android:shape="rectangle"> 
 

 
        <gradient 
 
         android:angle="90" 
 
         android:startColor="#FF000000" 
 
         android:type="linear" /> 
 

 
        <corners android:radius="5dp" /> 
 

 
        <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> 
 
       </shape> 
 
      </item> 
 
     </layer-list> 
 
    </item> 
 
</selector>

<ImageButton 
 
      android:id="@+id/gath" 
 
      android:layout_width="0dp" 
 
      android:layout_height="35dp" 
 
      android:layout_marginTop="40dp" 
 
      android:layout_weight="1" 
 
      android:background="@drawable/tiles" 
 
      app:srcCompat="@drawable/ic_del" />

+0

내 이미지 버튼 아이콘이 보이지 않습니다 배경에만 – Delphian

+0

내 편집 된 코드를 확인하십시오 –

+0

그래도 그래디언트보기는 있지만 그림자를 얻는 것이 주 목표입니다. 그것은 두 개의 사각형이 주 색상 (예를 들어 초록색)을 가진 첫 번째 사각형과 두 번째 사각형 (보기의 아래쪽)에 있음을 의미합니다. – Delphian