android点击波纹效果
A. 安卓按钮按下效果怎么设置呢怎么设置按钮圆角和按下效果
可以通过shape设置圆角
<?xml version="1.0" encoding="utf-8"?>
<!-- shape如果不声明形状默认是正方形 -->
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 设置圆角 -->
<corners android:radius="2dp" >
</corners>
<!-- 设置填充色 -->
<solid android:color="#4285f4" >
</solid>
<!-- 设置边框的颜色和宽度 -->
<stroke
android:width="1dp"
android:color="#4285f4" >
</stroke>
</shape>
通过selector设置点击效果
button_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- 这个是用于控制按钮组背景的文件 -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- **点击时效果**********背景引用的资源*************************是否获得焦点*********************是否按下******* -->
<item android:drawable="@drawable/button_p" android:state_focused="true" android:state_pressed="false"/>
<item android:drawable="@drawable/button_p" android:state_focused="true" android:state_pressed="true"/>
<item android:drawable="@drawable/button_p" android:state_focused="false" android:state_pressed="true"/>
<!-- **************没有任何操作时显示的背景************** -->
<item android:drawable="@drawable/button_n"></item>
</selector>
在xml文件中设置button的background属性。
android:background="@drawable/button_bg"
B. Android中CardView的使用
一、简介
Material design 中有一种很个性的设计概念:卡片式设计(Cards),这种设计与传统的List Item 有所区别,Cards 包含更多的内容元素和拥有自己的 UI 特征,关于 Cards 的设计规范可以参考官网介绍:
https://material.google.com/components/cards.html#
为了更好地实现这种 Cards UI 的设计,Google在v7 包中引进了一种全新的控件:CardVew。用一句话介绍了 CardView:一个带圆角和阴影背景的 FrameLayout。CardView在Android Lollipop(API 21)及以上版本的系统中适配较好。
二、导入依赖
compile 'com.android.support:cardview-v7:版本'
三、常用属性
1. API 5 以上(Android 2.0)
1.1 app:cardConerRadius: 圆角的半径
1.2 app:cardBackgroundColor:CardView 的卡片颜色
2. API 21 以上(Android 5.0)
2.1 app:cardElevation:CardView 的 Z 轴阴影
2.2 app:cardMaxElevation:阴影的最大高度
2.3 android:foreground="?android:attr/selectableItemBackground":点击时有波纹发散效果
四、排版技巧
CardView 从本质上属于 FrameLayout,而 CardView 通常包含了较多的内容元素,为了方 便 地 排 版 布 局 中 的 各 个 元 素 , 一 般 借 助 于 其 他 基 本 布 局 容 器 , 比 如 使 用 了 一个RelativeLayout 作为 CardView 的唯一子布局。
C. 如何取消android5.0的水波纹效果
<item android:state_enabled="false">
<shape>
<corners android:radius="2dp"></corners>
<solid android:color="@color/redcolorPressed"></solid>
</shape>
</item>
<item android:state_pressed="true">
<shape>
<corners android:radius="2dp"></corners>
<solid android:color="@color/redcolorPressed"></solid>
D. 如何让所有 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!等下就去试试喽