From d39c7d8fc5d94a71ca7eaeaf4c3f4259d1479003 Mon Sep 17 00:00:00 2001 From: linminjie <1004644107@qq.com> Date: Thu, 8 Jun 2023 14:03:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B7=A6=E5=8F=B3=E6=8A=96?= =?UTF-8?q?=E5=8A=A8=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../unionmedtv/utils/MyGridLayoutManager.java | 23 ++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) 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(); + } }