在5.0以上系统,原生方式实现触模反馈

1.项目得用5.0或5.0以上的sdk 编译。

如:

android{
  compileSdkVersion 21
  buildToolsVersion '21.1.2'
}

2.添加 5.0样式(material design)

在value下,新建文件夹values-v21

添加styles.xml

<?xml version="1.0" encoding="uft-8">
<resources>
    <style name="AppBaseTheme" parent="android:Theme.Material.Light">
        <item name="android:windowTranslucentStatus">true</item>
    </style>
</resources>

3.添加一些5.0 对应的drawable 或者selector

首先新建一个drawable-v21的文件夹

  • a.有背景图片的按钮(Button)

正常情况下,我们会写一个selector

如:selector_login.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    >
  <!-- 这里只写了一种状态,也可以写多种-->
    <item android:drawable="@drawable/log_in"/>
</selector>

在drawable-21 里添加对应的文件( selector_login.xml )

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/post_item_list_s_ripple"><!-- 这里的这个color是必须不可少的参数-->

    <item android:drawable="@drawable/log_in"/>

</ripple>

android:color="@color/post_item_list_s_ripple" 这个颜色值 ,就是对应的波纹颜色。

最后,在对应的按钮里设置背景就Ok

<Button
  android:id="@+id/btnExit"
  style="@style/layout_wrap"
  android:layout_gravity="center_horizontal"
  android:layout_marginTop="50dp"
  android:background="@drawable/selector_login"
  android:text="@string/setting_exit"
  android:textColor="@color/white_color" />
  • b.listview列表选项。

其本和上面按钮的是一样的。但是有几点注意。

1.发现用listSelector 比 用 itemView 的backgroud兼容性更好。

如果用listSelector的话:

item normal 时的颜色最好设置成ListView 的背景颜色。否则ListView 的item 都是没有默认色。

4.用代码创建 RippleDrawable

首先,创建一个selector (用代码的方式)

// 代码构建一个shape
GradientDrawable drawable = new GradientDrawable();
drawable.setColor(Color.parseColor("#ffffff"));
drawable.setStroke(1, getResources().getColor(R.color.all_bg));

GradientDrawable drawable_h = new GradientDrawable();
drawable_h.setColor(getResources().getColor(R.color.all_bg));

//构建一个根据 view 状态改变的Drawable
StateListDrawable stateListDrawable = new StateListDrawable();

//Non focused states
stateListDrawable.addState(new int[]{-android.R.attr.state_focused, 
    -android.R.attr.state_selected,
    -android.R.attr.state_pressed},
        drawable);
stateListDrawable.addState(new int[]{-android.R.attr.state_focused,
    android.R.attr.state_selected,
    -android.R.attr.state_pressed},
        drawable_h);
//Focused states
stateListDrawable.addState(new int[]{android.R.attr.state_focused, 
    -android.R.attr.state_selected, -android.R.attr.state_pressed},
        drawable_h);
stateListDrawable.addState(new int[]{android.R.attr.state_focused, 
    android.R.attr.state_selected, -android.R.attr.state_pressed},
        drawable_h);
//Pressed
stateListDrawable.addState(new int[]{android.R.attr.state_selected, 
    android.R.attr.state_pressed},
        drawable_h);
stateListDrawable.addState(new int[]{android.R.attr.state_pressed},
        drawable_h);

//上面是一个完整的,所以有点多。可以取部分自己需要。

创建RippleDrawable 就稍微简单得一点儿

// 还是上面的drawable 和 drawable_h
ColorStateList stateList = ColorStateList.valueOf(Color.parseColor("#cccccc"));
RippleDrawable rippleDrawable = new RippleDrawable(stateList,drawable,drawable_h);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,953评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,855评论 0 17
  • 疯狂的双十一过去没俩天,小编就收到了网上购买的治脱发洗发水套装,本来没想买什么东西,但是摸了摸渐高的发际线,凑个热...
    谈笑挽天回阅读 3,975评论 1 1
  • 三城遥 废锦溪木叶复止上 囷囷合为水逆 善乎其辞 古蔺潍坊 于碣石之限 惊呼 至瑶径 临畔竹 尝醴谷之美 欲...
    苏三城阅读 1,450评论 0 0
  • 2017年6月16日一.mac系统下如何将外接键盘设置成和苹果键盘一样,option 和 command对换 二....
    wangyu2488阅读 12,095评论 0 0

友情链接更多精彩内容