วิธีตั้งค่าเอฟเฟกต์ระลอกคลื่นใน textview หรือ imageview บน Android


127

ฉันต้องการตั้งค่าเอฟเฟกต์ระลอกคลื่นในมุมมองข้อความและมุมมองภาพใน Android Studio ฉันจะทำมันได้อย่างไร?


1
โปรดอธิบายคำถามของคุณให้ละเอียดก่อนสิ่งที่คุณต้องการจริงๆและสิ่งที่คุณได้ลองทำจนถึงตอนนี้เพียงแค่บอกว่าฉันต้องการเอฟเฟกต์ระลอกคลื่นทำให้เป็นคำถามที่กว้างมากนอกจากนี้คุณยังสามารถให้ลิงค์เพื่ออ้างอิงถึงสิ่งที่คุณต้องการได้อีกด้วยดูstackoverflow com / help / how-to-ask
Anirudh Sharma

อันที่จริงฉันต้องการเอฟเฟกต์สำหรับเอฟเฟกต์มุมมองข้อความและมุมมองภาพเลือก / ไม่เลือกเอฟเฟกต์
Vasant

คุณลองค้นหาสิ่งเดียวกันหรือไม่
Anirudh Sharma

คำตอบ:


277

อ้างอิง: http://developer.android.com/training/material/animations.html ,

http://wiki.workassis.com/category/android/android-xml/

<TextView
.
.
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
/>

<ImageView
.
.
.
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
/>

2
มันใช้งานได้ดีกับฉันบนอมยิ้ม แต่วิธีนี้ใช้กับแอนดรอยด์รุ่นใด และมันใช้ได้กับ pre-lollipop หรือไม่?
Basheer AL-MOMANI

2
@Richard ฉันมีปัญหากับ KitKat (หรือ ICS) เมื่อปีที่แล้วและผู้ฟังการคลิกไม่ทำงานหากไม่มี Android: clickable = "true" สำหรับเวอร์ชันนั้น
DoruChidean

25
สำหรับ Android เวอร์ชันใหม่ตอนนี้คือandroid:background="?android:attr/selectableItemBackground"
tmm1

2
จะใช้สิ่งนี้ได้อย่างไรเมื่อต้องการพื้นหลังแบบกำหนดเอง ??
60

3
ความแตกต่างระหว่างสิ่งนี้กับ / ไม่มีBorderless youtube.com/watch?v=wOjA8tS5sbc
Gibolt

82

หากคุณต้องการให้ระลอกคลื่นมีขนาดเท่ากับขนาดของ TextView / ImageView ให้ใช้:

<TextView
android:background="?attr/selectableItemBackground"
android:clickable="true"/>

(ฉันคิดว่ามันดูดีกว่า)


2
มีความแตกต่างในการใช้selectableItemBackgroundvsselectableItemBackgroundBorderless
rakesh kashyap

ฉันไม่รู้ว่าทำไมมันถึงไม่ติดกับพรมแดนและมันขยายไปทั่วทั้งเค้าโครง
VSB

4
@rakeshkashyap ความแตกต่างคือ selectableItemBackground จะทำให้ระลอกคลื่นอยู่ในขนาดมุมมอง (กว้าง / สูง) selectableItemBackgroundBorderless จะขยายการกระเพื่อมของมุมมองอื่น ๆ (เช่นการกระเพื่อมของแอปเครื่องคิดเลขอย่างเป็นทางการ)
Tudor

1
และต้องตั้งค่า >>> android: focusable = "true"
Amos

เป็นประโยชน์ ขอบคุณ
Pooja

25

โปรดดูคำตอบด้านล่างสำหรับเอฟเฟกต์ระลอก

ระลอกใน Textview หรือมุมมอง:

android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackgroundBorderless"

ระลอกบนปุ่มหรือมุมมองภาพ:

android:foreground="?android:attr/selectableItemBackgroundBorderless"

4
โปรดสังเกตว่าselectableItemBackgroundBorderlessเป็น API 21+ ด้านล่างนี้คุณสามารถเลือกที่selectableItemBackgroundจะหลีกเลี่ยงปัญหาความเข้ากันได้
StevenTB

10

คุณสามารถใช้android-ripple-background

เริ่มเอฟเฟกต์

final RippleBackground rippleBackground=(RippleBackground)findViewById(R.id.content);
ImageView imageView=(ImageView)findViewById(R.id.centerImage);
imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        rippleBackground.startRippleAnimation();
    }
});

หยุดภาพเคลื่อนไหว:

rippleBackground.stopRippleAnimation();

ดี! มี Kotlin รุ่นนี้หรือไม่?
rengineer

8
<TextView
            android:id="@+id/txt_banner"
            android:layout_width="match_parent"
            android:text="@string/banner"
            android:gravity="center|left"
            android:layout_below="@+id/title"
            android:background="@drawable/ripple_effect"
            android:paddingLeft="15dp"
            android:textSize="15sp"
            android:layout_height="45dp" />

เพิ่มสิ่งนี้ลงในเบิกได้

<?xml version="1.0" encoding="utf-8"?>
<!--this ribble animation only working for >= android version 21-->
<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/click_efect" />

ลองดู


6

ลองดู สิ่งนี้ใช้ได้ผลสำหรับฉัน

android:clickable="true"
    android:focusable="true"
    android:background="?android:attr/selectableItemBackground"

1
ฉันเคยพูดถึงเรื่องนี้มาก่อนแล้ว ( stackoverflow.com/a/50347848/1954960 ) ดังนั้นแทนที่จะทำให้คำตอบซ้ำกันโปรดยกนิ้วให้คำตอบของฉันขอบคุณ! :)
Zafer Celaloglu

5

นอกเหนือจากคำตอบข้างต้นกำลังเพิ่มโฟกัสได้เพื่อหลีกเลี่ยงคำเตือนของตัวแก้ไข UI

android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"

4

ในกรณีของวิธีแก้ปัญหาที่ได้รับการโหวตอย่างดีที่โพสต์โดย @Bikesh M Annur ( ที่นี่ ) ไม่ได้ผลสำหรับคุณให้ลองใช้:

<TextView
...
android:background="?android:attr/selectableItemBackgroundBorderless"
android:clickable="true" />

<ImageView
...
android:background="?android:attr/selectableItemBackgroundBorderless"
android:clickable="true" />

นอกจากนี้เมื่อใช้การandroid:clickable="true"เพิ่มandroid:focusable="true"เนื่องจาก:

" วิดเจ็ตที่ประกาศว่าสามารถคลิกได้ แต่ไม่ได้ประกาศว่าสามารถโฟกัสได้จะไม่สามารถเข้าถึงได้ผ่านทางแป้นพิมพ์ "


3

เพิ่ม android:clickable="true" android:focusable="true"

สำหรับ Ripple Effect

android:background="?attr/selectableItemBackgroundBorderless"

สำหรับ Selectable Effect

android:background="?android:attr/selectableItemBackground"

สำหรับเอฟเฟกต์ปุ่ม

android:adjustViewBounds="true" style="?android:attr/borderlessButtonStyle"

2

นอกจากคำตอบของ @Bikesh M Annur แล้วอย่าลืมอัปเดตไลบรารีสนับสนุนของคุณ ก่อนหน้านี้ฉันใช้ 23.1.1 และไม่มีอะไรเกิดขึ้น การอัปเดตเป็น 23.3.0 นั้นเป็นเคล็ดลับ



1

หรือคุณสามารถลองใช้ไลบรารีนี้ (Android 9+): RippleEffect

บูรณาการ

dependencies {
    compile 'com.github.traex.rippleeffect:library:1.3'
}

การใช้งาน:

<com.andexert.library.RippleView
  android:id="@+id/more"
  android:layout_width="?android:actionBarSize"
  android:layout_height="?android:actionBarSize"
  android:layout_toLeftOf="@+id/more2"
  android:layout_margin="5dp"
  rv_centered="true">

  <ImageView
    android:layout_width="?android:actionBarSize"
    android:layout_height="?android:actionBarSize"
    android:src="@android:drawable/ic_menu_edit"
    android:layout_centerInParent="true"
    android:padding="10dp"
    android:background="@android:color/holo_blue_dark"/>

</com.andexert.library.RippleView>

8
ฉันใช้มันมานานแล้ว แต่ฉันไม่แนะนำให้ใช้อีกต่อไปเว้นแต่คุณจะมุ่งสู่ Android 2.3 เป็นบั๊กกี้ล้าหลังและสร้างรหัสสำเร็จรูป และเนื่องจากในเวลานี้ 43% ของอุปกรณ์ทั้งหมดมี Android 5 หรือ 6 คุณสามารถยึดติดกับselectableItemBackgroundเมื่อกำหนดเป้าหมายเป็น Android 4 ขึ้นไป
0101100101

0

วิธีที่ดีที่สุดในการเพิ่ม:

    <ImageView
        android:id="@+id/ivBack"
        style="?attr/actionButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="16dp"
        android:src="@drawable/ic_back_arrow_black"
        android:tint="@color/white" />

-4

การใช้ไลบรารี นี่คือหนึ่งในนั้น เพียงเพิ่มการอ้างอิงและใส่โค้ดด้านล่างใน xml ก่อนแต่ละองค์ประกอบที่ต้องการเอฟเฟกต์ระลอก:

<com.balysv.materialripple.MaterialRippleLayout
android:id="@+id/ripple"
android:layout_width="match_parent"
android:layout_height="wrap_content">

4
โอ้ได้โปรดไม่มันไม่ใช่วิธีที่ดีที่สุดเพราะคุณควบคุมมันได้น้อยลงและรองรับอย่างกว้างขวางใน Android SDK เอง หากใครอ่านสิ่งนี้ฉันแนะนำให้ดูความคิดเห็นของ @Bikesh หรือ Karthik หากคุณต้องการควบคุมสี
Dion Segijn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.