Làm cách nào để thiết lập hiệu ứng gợn trên chế độ xem văn bản hoặc hình ảnh trên Android?


127

Tôi muốn đặt hiệu ứng gợn lên chế độ xem văn bản và hình ảnh trong Android Studio. Tôi làm nó như thế nào?


1
Vui lòng giải thích câu hỏi của bạn trước. Thực sự bạn cần gì và bạn đã thử những gì cho đến nay. Điều đó nói rằng tôi muốn hiệu ứng gợn khiến nó trở thành một câu hỏi rất rộng. Bạn cũng có thể đưa ra một số liên kết để tham khảo về những gì bạn muốn. Ngoài ra, hãy xem stackoverflow. com / help / how-to-ask
Anirudh Sharma

Trên thực tế tôi muốn có hiệu ứng cho chế độ xem văn bản và hiệu ứng chọn / bỏ chọn xem hình ảnh.
Vasant

bạn đã thử tìm kiếm cho cùng?
Anirudh Sharma

Câu trả lời:


276

Tham chiếu: http://developer.android.com/training/m Material / meta.html ,

http://wiki.workrame.com/carget/android/android-xml/

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

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

2
Rất vui vì nó hoạt động với tôi trên kẹo mút, nhưng cách này dành cho phiên bản Android nào? và nó có hoạt động trên kẹo mút không?
Basheer AL-MOMani

2
@Richard Tôi đã gặp sự cố với KitKat (hoặc ICS) một năm trước và người nghe nhấp chuột không hoạt động mà không có Android: clickable = "true" cho phiên bản đó
DoruChidean

25
Trên các phiên bản hiện đại của Android, hiện tạiandroid:background="?android:attr/selectableItemBackground"
tmm1

2
Làm thế nào có thể sử dụng điều này khi tôi muốn một nền tùy chỉnh ??
mrid

3
Sự khác biệt giữa điều này có / không có Borderless youtube.com/watch?v=wOjA8tS5sbc
Gibolt

81

Nếu bạn muốn Ripple được giới hạn theo kích thước của TextView / ImageView, hãy sử dụng:

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

(Tôi nghĩ rằng nó có vẻ tốt hơn)


2
Có sự khác biệt nào trong việc sử dụng selectableItemBackgroundvsselectableItemBackgroundBorderless
rakesh kashyap

Tôi không biết tại sao nó không bị giới hạn bởi biên giới và nó mở rộng thông qua toàn bộ bố cục
VSB

4
@rakeshkashyap sự khác biệt là có thể lựa chọnItemBackground sẽ giữ gợn trong kích thước khung nhìn (chiều rộng / chiều cao). selectableItemBackgroundBorderless sẽ mở rộng gợn của nó qua các chế độ xem khác (như Ripple ứng dụng máy tính chính thức)
Tudor

1
và cũng cần phải thiết lập điều này >>> android: Focusable = "true"
Amos

25

Vui lòng tham khảo câu trả lời dưới đây cho hiệu ứng gợn.

Ripple trên Textview hoặc xem:

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

Ripple trên Nút hoặc Imageview:

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

4
Xin lưu ý rằng đó selectableItemBackgroundBorderlesslà API 21+. Dưới đây bạn có thể chọn selectableItemBackgroundđể tránh sự cố tương thích
StevenTB

10

Bạn có thể sử dụng nền tảng android-ripple

Bắt đầu có hiệu lực

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();
    }
});

Dừng hoạt hình:

rippleBackground.stopRippleAnimation();

đẹp! Có phiên bản Kotlin này không?
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" />

thêm cái này vào drawable

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

thử cái này.


6

thử cái này. Điều này được làm việc cho tôi.

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

1
Tôi đã đề cập đến vấn đề này trước đây ( stackoverflow.com/a/50347848/1954960 ) vì vậy thay vì gây ra câu trả lời trùng lặp, xin vui lòng đưa ra câu trả lời của tôi, Cảm ơn bạn! :)
Zafer Celaloglu

5

ngoài các câu trả lời ở trên là thêm tiêu điểm để tránh cảnh báo của trình soạn thảo UI

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

4

Trong trường hợp giải pháp được bình chọn tốt được đăng bởi @Bikesh M Annur ( tại đây ) không hiệu quả với bạn, hãy thử sử dụng:

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

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

Ngoài ra, khi sử dụng android:clickable="true"add android:focusable="true"vì:

" Một widget được khai báo là có thể nhấp nhưng không được khai báo là có thể lấy được thì không thể truy cập được thông qua bàn phím. "


3

Thêm vào android:clickable="true" android:focusable="true"

Cho hiệu ứng Ripple

android:background="?attr/selectableItemBackgroundBorderless"

Cho hiệu ứng có thể lựa chọn

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

Đối với hiệu ứng nút

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

2

Ngoài câu trả lời của @Bikesh M Annur, hãy nhớ cập nhật các thư viện hỗ trợ của bạn. Trước đây tôi đang sử dụng 23.1.1 và không có gì xảy ra. Cập nhật nó lên 23.3.0 đã thực hiện thủ thuật.


1

Hoặc bạn có thể thử sử dụng thư viện này (android 9+): RippleEffect

Hội nhập

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

Sử dụng:

<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
Tôi đã sử dụng nó trong một thời gian khá dài, nhưng tôi không khuyên dùng nó nữa trừ khi bạn nhắm đến Android 2.3. Đó là lỗi, lag lag và tạo mã soạn sẵn. Và vì tại thời điểm này, 43% tất cả các thiết bị có Android 5 hoặc 6, bạn chỉ có thể sử dụng selectableItemBackgroundkhi nhắm mục tiêu Android 4 trở lên.
0101100101

1

cho gợn vòng tròn: android:background="?attr/selectableItemBackgroundBorderless"

cho gợn hình chữ nhật: android:background="?attr/selectableItemBackground"


0

Cách tốt nhất để thêm:

    <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

Sử dụng thư viện. Đây là một trong số họ. Chỉ cần thêm phụ thuộc của nó và đặt mã bên dưới vào xml trước mỗi phần tử cần hiệu ứng gợn:

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

4
ồ làm ơn không, đó không phải là cách tốt nhất vì bạn có ít quyền kiểm soát hơn và nó được hỗ trợ rộng rãi trong chính SDK Android. Nếu bất cứ ai đọc điều này, tôi khuyên bạn nên xem bình luận của @Bikesh hoặc Karthik nếu bạn muốn kiểm soát màu sắc.
Dion Segijn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.