- [Android] 기존 버튼에 ripple 효과주기2023년 10월 12일 22시 31분 50초에 업로드 된 글입니다.작성자: 핀수728x90반응형
다음과 같은 버튼이 있다고 하자,
enable 상태에 따라 버튼의 색상 (또는 모양)을 다르게 주기 위해 우리는 drawable을 만들어 사용한다.
(사진의 위쪽 버튼은 isEnabled = true, 아래쪽 버튼은 isEnabled = false 이다.)
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true"> <shape android:shape="rectangle"> <stroke android:color="@color/main" android:width="2dp"/> <corners android:radius="30dp"/> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <stroke android:color="@color/light_gray" android:width="2dp"/> <corners android:radius="30dp"/> </shape> </item> </selector>
상태에 따라 색상을 다르게 하고 싶으면 가장 상위 요소로 selector를 사용해야 한다.
그런데 이 상태에서 버튼을 클릭할 때 클릭 효과를 주려면 어떡해야할까?
클릭 효과를 줄 때는 ripple 를 사용해 효과를 적용 했었다.
<ripple xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:color="@color/forth" android:effectColor="@color/path" android:radius="100dp"> <item android:id="@android:id/background"> <shape android:shape="rectangle"> <solid android:color="@color/main"/> <corners android:radius="30dp"/> </shape> </item> </ripple>
android:color -> 효과의 색상을 의미한다.
android:effectColor -> 효과의 보조 색상이라는데 난 확인하지 못했다. 31 이상부터 사용가능하다고 한다.
android:radius -> 효과가 발생할 반경을 의미한다.
ripple이 활성화 되어야 하는 상태에 drawable로 적용해주면 된다.
android:drawable="@drawable/bg_button_ripple"
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:drawable="@drawable/bg_button_ripple"> <shape android:shape="rectangle"> <stroke android:color="@color/main" android:width="2dp"/> <corners android:radius="30dp"/> </shape> </item> <item android:state_enabled="false"> <shape android:shape="rectangle"> <stroke android:color="@color/light_gray" android:width="2dp"/> <corners android:radius="30dp"/> </shape> </item> </selector>
버튼의 상태에 따른 색상과 클릭 효과가 같이 적용된 것을 확인할 수 있다.
공부하며 작성된 글이라 잘못된 정보가 있을 수 있습니다.
말씀해주시면 수정하겠습니다. 감사합니다.
References
아래 글을 참고하여 작성 되었습니다.
[ Android ] 버튼에 Ripple 효과 적용하기
[ Android ] 버튼에 Ripple 효과 적용하기 탭을 누르는데 눌러진 피드백이 부족해서 Ripple(물방울이 번...
blog.naver.com
색상 상태 목록 리소스 | Android 개발자 | Android Developers
색상 상태 목록 리소스 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. ColorStateList는 XML로 정의할 수 있는 객체로 색상으로 적용할 수 있지만 실제로 색상이
developer.android.com
RippleDrawable | Android Developers
developer.android.com
728x90반응형'pinslog > Log.daily()' 카테고리의 다른 글
[Android] bringToFront() in xml (0) 2023.10.15 [Android] ProgressBar 색상 변경하기 (0) 2023.10.14 [Kotlin] 마지막 요소를 제거한 리스트를 얻고 싶을 때 (0) 2023.10.10 [Android] Dialog 외부 영역 터치 가능하도록 설정하기 (0) 2023.10.08 [Android] 제약조건 프로그래밍 방식으로 변경하기 | How to move constraint programmatically (0) 2023.10.03 다음글이 없습니다.이전글이 없습니다.댓글