[Android] 둥글게 펼쳐지는 Ripple을, 바삭하게 구현
이런 느낌 (화질 나쁘고 미안해..)
Ripple을 내고 싶은 요소의 외측을, FrameLayout (파트를 하나만 배치해 사용하는 레이아웃)로 둘러싸고, 겹쳐 줍니다.
이 구현은 FrameLayout을 상속하는 레이아웃에서도 사용할 수 있습니다.
보려는 Ripple의 범위는 padding하여 조작할 수 있습니다.
<FrameLayout
style="@style/RippleFrameStyle"
android:padding="20dp">
<Button
style="@style/ButtonStyle"
android:background="@drawable/icon" />
</FrameLayout>
적용하는 스타일은 이런 느낌입니다.
잘라내면 사용하겠습니다.
style.xml
<!--リップルエフェクトを出すための親レイアウト-->
<style name="RippleFrameStyle">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_centerVertical">true</item>
<item name="android:background">?attr/selectableItemBackgroundBorderless</item>
<item name="android:clickable">true</item>
<item name="android:focusable">true</item>
</style>
<!--配置する見た目となるレイアウト-->
<style name="ButtonStyle">
<item name="android:layout_width">30dp</item>
<item name="android:layout_height">30dp</item>
<item name="android:layout_centerVertical">true</item>
<item name="android:clickable">false</item>
</style>
터치 피드백을 부모가 되는 ViewGroup로 지정해 주는 이미지입니다.
FrameLayout 측에서 clicable과 focusable을 true로 하여 클릭, 포커스를 가능하게 해 줍니다.
또한 내부 부품이 클릭 가능하면 clicable을 제거합니다.
그리고, 부모가 되는 FrameLayout에, 친숙한 ?attr/selectableItemBackgroundBorderless 를 설정해 줍니다.
그건 그렇고, selectableItemBackgroundBorderless는 API 레벨 21 (Lollipop) 이상으로 제한됩니다.
사용자 지정 애니메이션 정의
그러므로, 어떠한 동적인 처리(onClickListener라든지)를 설정하는 경우, FrameLayout 자체를 지정해 주세요.
UI에 그렇게 구현 비용을 할 수는 없지만, 서둘러 Material Design 같은 탭 감출하고 싶다! 라고 말하는 분은 이것만 해 주면 조금 화려하게 될지도 모릅니다.
더 멋진 구현 방법 있으면 교수 받고 싶습니다.
Reference
이 문제에 관하여([Android] 둥글게 펼쳐지는 Ripple을, 바삭하게 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Tsutou/items/515308bfe715dd5ce05e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)