当前位置:首页 » 安卓系统 » 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

热点内容
谷歌play商店如何连接服务器 发布:2025-05-13 17:38:11 浏览:480
ssl认证服务器搭建 发布:2025-05-13 17:33:42 浏览:890
cpul2缓存 发布:2025-05-13 17:32:09 浏览:450
编译是语言的特点 发布:2025-05-13 17:31:36 浏览:583
原神怎么看服务器版本 发布:2025-05-13 17:09:14 浏览:73
java连接符 发布:2025-05-13 17:05:44 浏览:57
hadoop删除文件夹 发布:2025-05-13 17:00:14 浏览:509
sql数据库远程备份 发布:2025-05-13 16:48:13 浏览:528
app什么情况下找不到服务器 发布:2025-05-12 15:46:25 浏览:714
php跳过if 发布:2025-05-12 15:34:29 浏览:467