diff --git a/app/src/main/java/com/unionmed/unionmedtv/utils/MyGridLayoutManager.java b/app/src/main/java/com/unionmed/unionmedtv/utils/MyGridLayoutManager.java index 0ca6827..46bbcdd 100644 --- a/app/src/main/java/com/unionmed/unionmedtv/utils/MyGridLayoutManager.java +++ b/app/src/main/java/com/unionmed/unionmedtv/utils/MyGridLayoutManager.java @@ -1,9 +1,11 @@ package com.unionmed.unionmedtv.utils; +import android.animation.ValueAnimator; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.View; +import android.view.animation.CycleInterpolator; import androidx.recyclerview.widget.GridLayoutManager; @@ -57,6 +59,7 @@ public class MyGridLayoutManager extends GridLayoutManager { switch (direction) { case View.FOCUS_DOWN: if(currentPosition /getSpanCount() ==rowCount){ + jitter(getFocusedChild()); scrollToPosition(currentPosition); return findViewByPosition(currentPosition); }else if (currentPosition + getSpanCount() < count) { @@ -69,9 +72,9 @@ public class MyGridLayoutManager extends GridLayoutManager { } break; case View.FOCUS_UP: - if (currentPosition % getSpanCount() == 0 && upView != null) { + if (currentPosition / getSpanCount() == 0 && upView != null) { upView.requestFocus(); - } else if (currentPosition - getSpanCount() < count) { + }else if (currentPosition - getSpanCount() < count) { int nextRowFirstPosition1 = currentPosition - getSpanCount(); scrollToPosition(nextRowFirstPosition1); return findViewByPosition(nextRowFirstPosition1); @@ -83,11 +86,13 @@ public class MyGridLayoutManager extends GridLayoutManager { scrollToPosition(nextRowFirstPosition); return findViewByPosition(nextRowFirstPosition); } else if (currentPosition == count) { + jitter(getFocusedChild()); return findViewByPosition(currentPosition); } break; case View.FOCUS_LEFT: if (currentPosition == 0) { + jitter(getFocusedChild()); return findViewByPosition(currentPosition); } else if (currentPosition <=count) { int nextRowFirstPosition = currentPosition - 1; @@ -98,4 +103,18 @@ public class MyGridLayoutManager extends GridLayoutManager { } return super.onInterceptFocusSearch(focused, direction); } + //左右抖动效果 + public void jitter(View view){ + ValueAnimator shakeAnimator = ValueAnimator.ofFloat(0, 5); + shakeAnimator.setDuration(300); + shakeAnimator.setInterpolator(new CycleInterpolator(5)); + shakeAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + float currentValue = (float) animation.getAnimatedValue(); + view.setTranslationX(currentValue); + } + }); + shakeAnimator.start(); + } }