當前位置:首頁 » 安卓系統 » android點擊水波紋

android點擊水波紋

發布時間: 2023-03-12 18:08:25

⑴ 如何讓所有 View 都可以帶上點擊的水波紋效果

V2EX›Android

如何讓所有 View 都可以帶上點擊的水波紋效果?

AtlantisZ· 2015-11-12 23:49:00 +08:00

這是一個創建於 483 天前的主題,其中的信息可能已經有所發展或是發生改變。

根據 G官方文檔
定製觸摸反饋
材料設計中的觸摸反饋可在用戶與 UI 元素互動時,在接觸點上提供即時視覺確認。適用於按鈕的默認觸摸動畫使用全新 RippleDrawable 類別,以波紋效果實現不同狀態間的轉換。

在大多數情況下,您應以下列方式指定視圖背景,在您的視圖 XML 中應用此功能:

?android:attr/selectableItemBackground 指定有界的波紋
?android:attr/ 指定越界的波紋
注意: 是 API 級別 21 中推出的新屬性。

此外,您可利用 ripple 元素將 RippleDrawable 定義為一個 XML 資源。

您可以為 RippleDrawable 對象指定一種顏色。如果要改變默認觸摸反饋顏色,請使用主題的 android:colorControlHighlight 屬性。


但是發現有時候一個 LinearLayout 設置 android:background="?android:attr/selectableItemBackground"
就帶上了水波紋效果,有的不行,,TextView 也是,設置 android:background="?android:attr/selectableItemBackground"有的帶上了,有的不行.


RecyclerView 的 Item layout 根布局加上了這個屬性也無效果.

後來輾轉反側,找到了 Stackflow 找到的回答,也不奏效.
FrameLayout view = (FrameLayout) View.inflate(context, R.layout.item_top_news, null);
RippleDrawable drawable = (RippleDrawable) mActivity.getResources()
.getDrawable(R.drawable.ripple_background);

view.setClickable(true);
view.setForeground(drawable);

求解如何實現 BiliBili MD 客戶端,幾乎每個 View 點擊都有的水波紋效果.

波紋

attr

Android

drawable

12 回復 |直到 2015-11-19 21:41:40 +08:00

1

little_cup 2015-11-13 00:04:55 +08:00

從設計的角度說,你不應該讓所有的 View 都帶上 Ripple 效果,只應該讓可點擊的元素帶上。
從程序的角度說,你無法讓所有的 View 都帶上 Ripple 效果,只能讓拿到點擊事件的元素帶上。

2

AtlantisZ 2015-11-13 00:15:38 +08:00

@little_cup額,我只是感覺很難有短文字敘述清楚問題,原來標題是如何讓 RecyclerView 的子 Item 帶上水波紋效果了.感覺太局限了.
請問現在 RecyclerView 的子 Item 已經可以響應點擊事件跳轉 Activity 了,請問如何才能帶上水波紋的點擊效果.我在 Item 的 layout 根布局修改 android:background="?android:attr/selectableItemBackground"沒有效果.

3

little_cup 2015-11-13 00:25:24 +08:00

@AtlantisZ哪個 view 綁定 click 就給哪個設 selectableItemBackground 。當然注意不要被其他 view 在視覺上覆蓋了。

4

AtlantisZ 2015-11-13 00:42:01 +08:00

在 onBindViewHolder 中
TypedValue typedValue = new TypedValue();
mActivity.getTheme().resolveAttribute(android.R.attr.selectableItemBackground, typedValue, true);
Drawable background = getResources().getDrawable(typedValue.resourceId);
// Drawable background = getResources().getDrawable(R.drawable.ripple_background);
holder.rootView.setBackground(background);
holder.rootView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getContext(), VideoDetailActivity.class));
// ToastUtils.showToast(mActivity, "av :: " + mRecommendList.get(position).av);
}
});
還是沒有用額.

5

AtlantisZ 2015-11-13 11:17:22 +08:00

@little_cup

在 onBindViewHolder 中
TypedValue typedValue = new TypedValue();
mActivity.getTheme().resolveAttribute(android.R.attr.selectableItemBackground, typedValue, true);
Drawable background = getResources().getDrawable(typedValue.resourceId);
// Drawable background = getResources().getDrawable(R.drawable.ripple_background);
holder.rootView.setBackground(background);
holder.rootView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getContext(), VideoDetailActivity.class));
}
});
還是沒有用額.

6

miao1007 2015-11-15 19:55:46 +08:00

這樣寫不會報錯?

ClassNoFound 這個錯誤在低 API 下會出現

7

ybjaychou 2015-11-17 20:53:35 +08:00

我也是在愁這個問題,同樣是在 RecyclerView 的 Item 裡面,不知道怎麼才能有點擊效果,就算不是水紋也可以啊。。
順便搭個車,就是怎麼在 RecyclerView 裡面做多選操作,然後 Toolbar 上面出現操作按鈕,不知道有人做過沒

8

ecma 2015-11-18 19:01:06 +08:00

同表示弄不出波紋點擊效果,不知道是不是 SDK 版本的原因。
目前暫時通過 github 上一個開源項目實現那個效果了。。
https://github.com/balysv/material-ripple

9

ecma 2015-11-18 19:05:55 +08:00

@ybjaychou
我自己是在 itemView 上加入了一個 checkBox ,平常處於隱藏狀態,需要批量刪除的適合,重新載入 RecyclerView 讓 checkBox 顯示。而 checkBox 的點擊事件則是往一個數組裡面扔 item 的 id ,那樣就知道選了那些。
toolbar 的改變的話可以通過 onPrepareOptionsMenu 和 invalidateOptionsMenu()來改變,當然也可以通過 ActionMode.Callback 來實現
通過這種方法來實現的話需要對 checkBox 的點擊進行標示優化,避免列表滑動的適合 checkBox 錯誤問題

10

ybjaychou 2015-11-19 12:52:08 +08:00 via Android

@ecma好,謝謝,我試試!

11

AtlantisZ 2015-11-19 16:49:47 +08:00

@ybjaychou
@ecma

參考http://stackoverflow.com/questions/26961147/touch-feedback-with-recyclerview-and-cardview/29033353解決了 RecyclerView 中 Item 無水波紋效果的問題額.

12

ecma 2015-11-19 21:41:40 +08:00

@AtlantisZ
THX!等下就去試試嘍

⑵ Android開發,按鈕水波紋

Material Design是Google推出的一個全新的設計語言,它的特點就是擬物扁平化。

Material Design包含了很多內容,大致把它分為四部分:

主題和布局——Android L——Material Design詳解(主題和布局)
視圖和陰影——ANDROID L——Material Design詳解(視圖和陰影)
UI控制項——ANDROID L——Material Design詳解(UI控制項)
動畫——ANDROID L——Material Design詳解(動畫篇)

⑶ android 真實水波紋效果,要美化過的。

當使用了Material主題後,波紋動畫會自動應用在所有的控制項上,當然可以來設置其屬性來調整到需要的效果。

可以通過如下代碼設置波紋的背景:
android:background="?android:attr/selectableItemBackground"波紋有邊界

android:background="?android:attr/"波紋超出邊界

使用效果如下:
B1是不設任何背景的按鈕
B2設置了?android:attr/selectableItemBackground
B3設置了?android:attr/

⑷ Android Transition

Android Transition Framwork 主要用來做 三件事

而你需要做的,首先對Activity的ThemeStyle添加 windowContentTransitions 屬性:

用 startActivity(mIntent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle()); 來替換之前的startActivity();

讓我們來分析以下具體發生了什麼:

3.使用 ActivityOptions.makeSceneTransitionAnimation() 來定義共享的view和transitionName

如果兩個不同界面有多個元素需要共享的話,使用Pair來包裝

這里我們實現了在RevealActivity中兩個View的更換,點擊右下角切換按鈕,水波紋開始散開,第一個View逐漸消失,第二個View逐漸出現。

createCircularReveal的各參數代表的具體含義 參照這里 。

https://github.com/Trisaa/MaterialTranstion

https://github.com/lgvalle/Material-Animations
https://github.com/hehonghui/android-tech-frontier/tree/master/others/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BAAndroid%20%E6%96%B0%E7%89%B9%E6%80%A7-Transition-Part-1

折疊翻頁效果
Fragment Transition
SwitchLayout

熱點內容
app什麼情況下找不到伺服器 發布:2025-05-12 15:46:25 瀏覽:714
php跳過if 發布:2025-05-12 15:34:29 瀏覽:467
不定時演算法 發布:2025-05-12 15:30:16 瀏覽:131
c語言延時1ms程序 發布:2025-05-12 15:01:30 瀏覽:167
動物園靈長類動物配置什麼植物 發布:2025-05-12 14:49:59 瀏覽:738
wifi密碼設置什麼好 發布:2025-05-12 14:49:17 瀏覽:150
三位數乘兩位數速演算法 發布:2025-05-12 13:05:48 瀏覽:399
暴風影音緩存在哪裡 發布:2025-05-12 12:42:03 瀏覽:545
access資料庫exe 發布:2025-05-12 12:39:04 瀏覽:632
五開的配置是什麼 發布:2025-05-12 12:36:37 瀏覽:367