Android原始碼解析--Material Design之水波紋點選效果RippleEffect使用
阿新 • • 發佈:2019-01-06
好了,這樣差不多就完成了我們的水波漣漪效果了。。。。
看一下怎麼用吧?
如果你的開發IDE是Android Studio那麼我們可以把github上的庫整合到我們的專案中,
- <span style="font-size:14px;">dependencies {
- compile 'com.github.traex.rippleeffect:library:1.2.3'
- } </span>
-
<span style="font-size:14px;"><com.Hankkin.library.RippleView
- android:id="@+id/more"
- android:layout_width="?android:actionBarSize"
- android:layout_height="?android:actionBarSize"
- android:layout_toLeftOf="@+id/more2"
- android:layout_margin="5dp"
- ripple:rv_centered="true">
- <ImageView
- android:layout_width="?android:actionBarSize"
-
android:layout_height="?android:actionBarSize"
- android:src="@android:drawable/ic_menu_edit"
- android:layout_centerInParent="true"
- android:padding="10dp"
- android:background="@android:color/holo_blue_dark"/>
- </com.Hankkin.library.RippleView> </span>
——————————————————————————————————————————————————————————————————————————————————————————————————————
下面再和大家說一下比較重要的一點吧,這個網上的demo都沒有說,是我自己用的時候發現的
也就是我們的點選事件,這時候如果你還用普通的OnClickListener()是不行的,因為動畫還沒有結束,就直接startIntent()跳轉介面了,如果你的介面沒有finish()掉的話,返回的時候動畫會繼續執行完。
那麼怎麼破呢?
我們就需要給我們的RippleView設定監聽事件而不是我們的控制元件設定監聽事件了,因為我們的RippleView中有這樣一個介面:
- <span style="font-size:14px;">publicinterface OnRippleCompleteListener {
- void onComplete(RippleView rippleView);
- } </span>
- <span style="font-size:14px;">RippleView view = (RippleView) findViewById(R.id.reView);
- view.setOnRippleCompleteListener(new RippleView.OnRippleCompleteListener() {
- @Override
- publicvoid onComplete(RippleView rippleView) {
- Intent intent = new Intent(getApplicationContext(),HelloActivity.class);
- startActivity(intent);
- }
- }); </span>
小夥伴們,快試一下吧。
當然我們的ListView的item點選也可以實現這樣的效果,因為我們的RippleView中是支援Listview點選的
- /**
- * Send a click event if parent view is a Listview instance
- * 若為Listview傳送點選事件
- * @param isLongClick Is the event a long click ?
- */
- privatevoid sendClickEvent(final Boolean isLongClick) {
- if (getParent() instanceof AdapterView) {
- final AdapterView adapterView = (AdapterView) getParent();
- finalint position = adapterView.getPositionForView(this);
- finallong id = adapterView.getItemIdAtPosition(position);
- if (isLongClick) {
- if (adapterView.getOnItemLongClickListener() != null)
- adapterView.getOnItemLongClickListener().onItemLongClick(adapterView, this, position, id);
- } else {
- if (adapterView.getOnItemClickListener() != null)
- adapterView.getOnItemClickListener().onItemClick(adapterView, this, position, id);
- }
- }
- }
這裡先提一下,以後會詳細說怎麼用的.....
github地址:
https://github.com/traex/RippleEffect