在5.0以上系統(tǒng),原生方式實現觸模反饋

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"
    >
  <!-- 這里只寫了一種狀態(tài),也可以寫多種-->
    <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.發(fā)現用listSelector 比 用 itemView 的backgroud兼容性更好。

如果用listSelector的話:

item normal 時的顏色最好設置成ListView 的背景顏色。否則ListView 的item 都是沒有默認色。

4.用代碼創(chuàng)建 RippleDrawable

首先,創(chuàng)建一個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 狀態(tài)改變的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);

//上面是一個完整的,所以有點多??梢匀〔糠肿约盒枰?

創(chuàng)建RippleDrawable 就稍微簡單得一點兒

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容