20 | * 发现:如果是横向的grid,然后把item的height给为match_parent,那么本类会自动不绘制底部的分隔,那么底部的item的height会比其他的高,因为每个item高度为view高度加上divider的高度,最底部没有分隔,那么view就会高一些,故加上底部的偏移
21 | */
22 |
23 | public class DividerGridItemDecoration extends RecyclerView.ItemDecoration {
24 |
25 | private Drawable mDivider;
26 |
27 | private int mDividerHSpacing;
28 |
29 | private int mDividerVSpacing;
30 |
31 | private Drawable mLastDivider;
32 |
33 | private int mLastDividerSize;
34 |
35 | public DividerGridItemDecoration() {
36 | set(new ColorDrawable(Color.TRANSPARENT), mDividerHSpacing, mDividerVSpacing, new ColorDrawable(Color.TRANSPARENT), mLastDividerSize);
37 | }
38 |
39 | public DividerGridItemDecoration(int horizaontalSpacing, int verticalSpacing, int lastDividerSize) {
40 | set(new ColorDrawable(Color.TRANSPARENT), horizaontalSpacing, verticalSpacing, new ColorDrawable(Color.TRANSPARENT), lastDividerSize);
41 | }
42 |
43 | public DividerGridItemDecoration(Drawable divider, int horizaontalSpacing, int verticalSpacing, Drawable lastDivider, int lastDividerSize) {
44 | set(divider, horizaontalSpacing, verticalSpacing, lastDivider, lastDividerSize);
45 | }
46 |
47 | public DividerGridItemDecoration(@ColorInt int dividerColor, int horizaontalSpacing, int verticalSpacing, @ColorInt int lastDividerColor, int lastDividerSize) {
48 | set(new ColorDrawable(dividerColor), horizaontalSpacing, verticalSpacing, new ColorDrawable(lastDividerColor), lastDividerSize);
49 | }
50 |
51 | /**
52 | * @param divider
53 | * @param horizaontalSpacing
54 | * 横向间距
55 | * @param verticalSpacing
56 | * 纵向间距
57 | * @param lastDivider
58 | * @param lastDividerSize
59 | * 最后一行的后边距离,大于0才会生效
60 | */
61 | private void set(Drawable divider, int horizaontalSpacing, int verticalSpacing, Drawable lastDivider, int lastDividerSize) {
62 | this.mDivider = divider;
63 | this.mDividerHSpacing = horizaontalSpacing;
64 | this.mDividerVSpacing = verticalSpacing;
65 | this.mLastDivider = lastDivider;
66 | this.mLastDividerSize = lastDividerSize;
67 | }
68 |
69 | @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
70 | super.onDraw(c, parent, state);
71 | if (mDivider == null) {
72 | return;
73 | }
74 | if (mDividerHSpacing > 0) {
75 | drawHorizontalSpacing(c, parent);
76 | }
77 | if (mDividerVSpacing > 0) {
78 | drawVerticalSpacing(c, parent);
79 | }
80 | if (mLastDividerSize > 0) {
81 | drawLastSpacing(c, parent);
82 | }
83 | }
84 |
85 | /**
86 | * 绘制横向间距,不包括最后一列
87 | *
88 | * @param c
89 | * @param parent
90 | */
91 | private void drawHorizontalSpacing(Canvas c, RecyclerView parent) {
92 | int childCount = parent.getChildCount();
93 | for (int i = 0; i < childCount; i++) {
94 | final View child = parent.getChildAt(i);
95 | // 前边不用考虑是否是最后一列
96 | if (i < childCount - ((GridLayoutManager) parent.getLayoutManager()).getSpanCount()
97 | || (parent.getLayoutManager().canScrollVertically() || !RecyclerViewUtil.isLastGridRaw(parent, child))) {
98 | drawHorizontal(c, child, mDivider, mDividerHSpacing);
99 | }
100 | }
101 | }
102 |
103 | private void drawHorizontal(Canvas c, View child, Drawable divider, int spacing) {
104 | final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
105 | final int left = child.getRight() + params.rightMargin;
106 | final int right = left + spacing;
107 | final int top = child.getTop() - params.topMargin;
108 | final int bottom = child.getBottom() + params.bottomMargin;
109 | divider.setBounds(left, top, right, bottom);
110 | divider.draw(c);
111 | }
112 |
113 | /**
114 | * 绘制纵向间距,不包括最后一行
115 | *
116 | * @param c
117 | * @param parent
118 | */
119 | private void drawVerticalSpacing(Canvas c, RecyclerView parent) {
120 | int childCount = parent.getChildCount();
121 | for (int i = 0; i < childCount; i++) {
122 | final View child = parent.getChildAt(i);
123 | // 前边不用考虑是否是最后一行
124 | if (i < childCount - ((GridLayoutManager) parent.getLayoutManager()).getSpanCount()
125 | || (parent.getLayoutManager().canScrollHorizontally() || !RecyclerViewUtil.isLastGridRaw(parent, child))) {
126 | drawVertical(c, child, mDivider, mDividerVSpacing);
127 | }
128 | }
129 | }
130 |
131 | private void drawVertical(Canvas c, View child, Drawable divider, int spacing) {
132 | final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
133 | final int left = child.getLeft() - params.leftMargin;
134 | final int right = child.getRight() + params.rightMargin;
135 | final int top = child.getBottom() + params.bottomMargin;
136 | final int bottom = top + spacing;
137 | divider.setBounds(left, top, right, bottom);
138 | divider.draw(c);
139 | }
140 |
141 | /**
142 | * 绘制最后
143 | *
144 | * @param c
145 | * @param parent
146 | */
147 | private void drawLastSpacing(Canvas c, RecyclerView parent) {
148 | int childCount = parent.getChildCount();
149 | int i = childCount - ((GridLayoutManager) parent.getLayoutManager()).getSpanCount();
150 | for (; i < childCount; i++) {
151 | final View child = parent.getChildAt(i);
152 | if (RecyclerViewUtil.isLastGridRaw(parent, child)) {
153 | if (parent.getLayoutManager().canScrollHorizontally()) {
154 | drawHorizontal(c, child, mLastDivider, mLastDividerSize);
155 | } else if (parent.getLayoutManager().canScrollVertically()) {
156 | drawVertical(c, child, mLastDivider, mLastDividerSize);
157 | }
158 | }
159 | }
160 |
161 | }
162 |
163 | @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
164 | super.getItemOffsets(outRect, view, parent, state);
165 | GridLayoutManager gridLayoutManager = (GridLayoutManager) parent.getLayoutManager();
166 | if (gridLayoutManager.canScrollHorizontally()) {
167 | if (RecyclerViewUtil.isLastGridRaw(parent, view)) {// 如果是最后一列
168 | if (parent.getChildAdapterPosition(view) == gridLayoutManager.getItemCount() - 1) {// 最后一个
169 | outRect.set(0, 0, mLastDividerSize, 0);
170 | } else {
171 | outRect.set(0, 0, mLastDividerSize, mDividerVSpacing);
172 | }
173 | } /*
174 | * else if (RecyclerViewUtil.isLastGridColum(parent, view)) {//
175 | * 如果是最后一行,则不需要绘制底部 outRect.set(0, 0, mDividerHSpacing, 0); }
176 | */ else {
177 | outRect.set(0, 0, mDividerHSpacing, mDividerVSpacing);
178 | }
179 | } else if (gridLayoutManager.canScrollVertically()) {
180 | if (RecyclerViewUtil.isLastGridRaw(parent, view)) {// 如果是最后一行,则不需要绘制底部
181 | if (parent.getChildAdapterPosition(view) == gridLayoutManager.getItemCount() - 1) {
182 | outRect.set(0, 0, 0, mLastDividerSize);
183 | } else {
184 | outRect.set(0, 0, mDividerHSpacing, mLastDividerSize);
185 | }
186 | } /*
187 | * else if (RecyclerViewUtil.isLastGridColum(parent, view)) {//
188 | * 如果是最后一列,则不需要绘制右边 outRect.set(0, 0, 0, mDividerVSpacing); }
189 | */ else {
190 | outRect.set(0, 0, mDividerHSpacing, mDividerVSpacing);
191 | }
192 | }
193 |
194 | }
195 |
196 | }
197 |
--------------------------------------------------------------------------------
/library/src/main/java/com/skw/library/decoration/DividerLinearItemDecoration.java:
--------------------------------------------------------------------------------
1 | package com.skw.library.decoration;
2 |
3 | import android.graphics.Canvas;
4 | import android.graphics.Color;
5 | import android.graphics.Rect;
6 | import android.graphics.drawable.ColorDrawable;
7 | import android.graphics.drawable.Drawable;
8 | import android.support.annotation.ColorInt;
9 | import android.support.v7.widget.RecyclerView;
10 | import android.view.View;
11 |
12 | /**
13 | * @创建人 weishukai
14 | * @创建时间 17/1/8 上午10:46
15 | * @类描述 recyclerView使用LinearLayoutManager的时候绘制分隔线
16 | */
17 |
18 | public class DividerLinearItemDecoration extends RecyclerView.ItemDecoration {
19 |
20 | private Drawable mDivider;
21 |
22 | private int mDividerSize;
23 |
24 | private Drawable mLastDivider;
25 |
26 | private int mLastDividerSize;
27 |
28 | public DividerLinearItemDecoration() {
29 | set(new ColorDrawable(Color.TRANSPARENT), mDividerSize, new ColorDrawable(Color.TRANSPARENT), mLastDividerSize);
30 | }
31 |
32 | /**
33 | * 默认颜色透明
34 | *
35 | * @param dividerSize
36 | * @param lastDividerSize
37 | */
38 | public DividerLinearItemDecoration(int dividerSize, int lastDividerSize) {
39 | set(new ColorDrawable(Color.TRANSPARENT), dividerSize, new ColorDrawable(Color.TRANSPARENT), lastDividerSize);
40 | }
41 |
42 | public DividerLinearItemDecoration(Drawable divider, int dividerSize, Drawable lastDivider, int lastDividerSize) {
43 | set(divider, dividerSize, lastDivider, lastDividerSize);
44 | }
45 |
46 | /**
47 | * @param dividerColor
48 | * 分隔线的颜色
49 | * @param dividerSize
50 | * 分隔线的大小
51 | * @param lastDividerColor
52 | * 最后一行的分隔线颜色
53 | * @param lastDividerSize
54 | * 最后一行分隔线的大小,如果小于等于0,则不画
55 | */
56 | public DividerLinearItemDecoration(@ColorInt int dividerColor, int dividerSize, @ColorInt int lastDividerColor, int lastDividerSize) {
57 | set(new ColorDrawable(dividerColor), dividerSize, new ColorDrawable(lastDividerColor), lastDividerSize);
58 | }
59 |
60 | private void set(Drawable divider, int dividerSize, Drawable lastDivider, int lastDividerSize) {
61 | this.mDivider = divider;
62 | this.mDividerSize = dividerSize;
63 | this.mLastDivider = lastDivider;
64 | this.mLastDividerSize = lastDividerSize;
65 | }
66 |
67 | @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
68 | super.onDraw(c, parent, state);
69 | if (mDivider == null) {
70 | return;
71 | }
72 | if (parent.getLayoutManager().canScrollHorizontally()) {
73 | drawHorizontal(c, parent);
74 | } else if (parent.getLayoutManager().canScrollVertically()) {
75 | drawVertical(c, parent);
76 | }
77 | }
78 |
79 | private void drawHorizontal(Canvas c, RecyclerView parent) {
80 | final int top = parent.getPaddingTop();
81 | final int bottom = parent.getHeight() - parent.getPaddingBottom();
82 |
83 | int childCount = parent.getChildCount();
84 | for (int i = 0; i < childCount; i++) {
85 | final View child = parent.getChildAt(i);
86 | final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
87 | final int left = child.getRight() + params.rightMargin;
88 | boolean isLast = i == (childCount - 1);
89 | int dividerSize = getDividerSize(parent, isLast);
90 | if (dividerSize > 0) {
91 | final int right = left + dividerSize;
92 | if (isLast) {
93 | mLastDivider.setBounds(left, top, right, bottom);
94 | mLastDivider.draw(c);
95 | } else {
96 | mDivider.setBounds(left, top, right, bottom);
97 | mDivider.draw(c);
98 | }
99 |
100 | }
101 | }
102 | }
103 |
104 | private void drawVertical(Canvas c, RecyclerView parent) {
105 | final int left = parent.getPaddingLeft();
106 | final int right = parent.getWidth() - parent.getPaddingRight();
107 |
108 | int childCount = parent.getChildCount();
109 | for (int i = 0; i < childCount; i++) {
110 | final View child = parent.getChildAt(i);
111 | final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
112 | final int top = child.getBottom() + params.bottomMargin;
113 | boolean isLast = i == (childCount - 1);
114 | int dividerSize = getDividerSize(parent, isLast);
115 | if (dividerSize > 0) {
116 | final int bottom = top + dividerSize;
117 | if (isLast) {
118 | mLastDivider.setBounds(left, top, right, bottom);
119 | mLastDivider.draw(c);
120 | } else {
121 | mDivider.setBounds(left, top, right, bottom);
122 | mDivider.draw(c);
123 | }
124 |
125 | }
126 | }
127 | }
128 |
129 | @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
130 | super.getItemOffsets(outRect, view, parent, state);
131 | boolean isLast = isLastRow(parent, view);
132 | if (isLast && mLastDividerSize <= 0) {
133 | return;
134 | }
135 | if (parent.getLayoutManager().canScrollHorizontally()) {
136 | outRect.right = getDividerSize(parent, isLast);
137 | } else if (parent.getLayoutManager().canScrollVertically()) {
138 | outRect.bottom = getDividerSize(parent, isLast);
139 | }
140 |
141 | }
142 |
143 | private int getDividerSize(RecyclerView parent, boolean isLast) {
144 | if (isLast) {
145 | return mLastDividerSize;
146 | } else {
147 | return mDividerSize != 0 ? mDividerSize : parent.getLayoutManager().canScrollHorizontally() ? mDivider.getIntrinsicWidth() : mDivider.getIntrinsicHeight();
148 | }
149 | }
150 |
151 | private boolean isLastRow(RecyclerView parent, View view) {
152 | int itemPosition = parent.getChildAdapterPosition(view);
153 | if (itemPosition == parent.getLayoutManager().getItemCount() - 1) return true;
154 | return false;
155 | }
156 | }
157 |
--------------------------------------------------------------------------------
/library/src/main/java/com/skw/library/focus/FocusEffectView.java:
--------------------------------------------------------------------------------
1 | package com.skw.library.focus;
2 |
3 | import android.content.Context;
4 | import android.content.res.Resources;
5 | import android.graphics.Rect;
6 | import android.util.AttributeSet;
7 | import android.util.Log;
8 | import android.view.View;
9 | import android.view.ViewParent;
10 |
11 | import com.skw.library.R;
12 | import com.skw.library.TVRecyclerView;
13 |
14 | /**
15 | * @创建人 weishukai
16 | * @创建时间 17/1/20 上午11:38
17 | * @类描述 一句话说明这个类是干什么的
18 | */
19 |
20 | public class FocusEffectView extends AbsFocusEffectView {
21 |
22 | private String TAG = "FocusEffectView";
23 |
24 | public static final float scale = 1.145f;
25 |
26 | private final long scaleDuration = 200;
27 |
28 | /**
29 | * padding注意有效果图的边框的宽度
30 | */
31 |
32 | private Rect focusNormalPaddingRect;
33 |
34 | private Rect focusTabViewPaddingRect;
35 |
36 | private Rect focusPosterPaddingRect;
37 |
38 | public FocusEffectView(Context context) {
39 | super(context);
40 | init(context);
41 | }
42 |
43 | public FocusEffectView(Context context, AttributeSet attrs) {
44 | super(context, attrs);
45 | init(context);
46 | }
47 |
48 | public FocusEffectView(Context context, AttributeSet attrs, int defStyleAttr) {
49 | super(context, attrs, defStyleAttr);
50 | init(context);
51 | }
52 |
53 | private void init(Context context) {
54 | Resources resources = context.getResources();
55 | int normalPadding = resources.getDimensionPixelSize(R.dimen.focus_normal_padding) + resources.getDimensionPixelSize(R.dimen.focus_stroke);
56 | int tabViewPaddingH = resources.getDimensionPixelSize(R.dimen.focus_tab_view_padding_h) + resources.getDimensionPixelSize(R.dimen.focus_stroke);
57 | int tabViewPaddingV = resources.getDimensionPixelSize(R.dimen.focus_tab_view_padding_v) + resources.getDimensionPixelSize(R.dimen.focus_stroke);
58 | int posterPadding = resources.getDimensionPixelSize(R.dimen.focus_poster_padding) + resources.getDimensionPixelSize(R.dimen.focus_stroke);
59 | focusNormalPaddingRect = new Rect(normalPadding, normalPadding, normalPadding, normalPadding);
60 | focusTabViewPaddingRect = new Rect(tabViewPaddingH, tabViewPaddingV, tabViewPaddingH, tabViewPaddingV);
61 | focusPosterPaddingRect = new Rect(posterPadding, posterPadding, posterPadding, posterPadding);
62 |
63 | }
64 |
65 | @Override protected void onFocusOut() {
66 | Log.d(TAG, "onFocusOut");
67 | releaseFocusOutAnim();
68 | releaseFocusInAnim();
69 |
70 | if (oldFocusViewRef != null && oldFocusViewRef.get() != null) {
71 | View view = oldFocusViewRef.get();
72 | view.setScaleX(1.0f);
73 | view.setScaleY(1.0f);
74 | oldFocusViewRef.clear();
75 | }
76 | if (currentFocusViewRef != null) {
77 | View currentFocus = currentFocusViewRef.get();
78 | if (currentFocus != null) {
79 | Log.d(TAG, "onFocusOut:" + currentFocus.toString());
80 | switch (getViewFocusType(currentFocus)) {
81 | case FocusType.FOCUS_NORMAL:
82 | focusOutAnim(getViewFocusScaleAnim(currentFocus), scale, 1.0f, scaleDuration);
83 | break;
84 | case FocusType.FOCUS_POSTER:
85 | focusOutAnim(getViewFocusScaleAnim(currentFocus), scale, 1.0f, scaleDuration);
86 | break;
87 | case FocusType.FOCUS_TAB_VIEW:
88 | focusOutAnim(getViewFocusScaleAnim(currentFocus), scale, 1.0f, scaleDuration);
89 | break;
90 | }
91 | }
92 | }
93 | }
94 |
95 | @Override protected void onFocusIn() {
96 | View currentFocusView = currentFocusViewRef.get();
97 |
98 | /**
99 | * 现在只做了一层处理,最好是给parent设置tag,表示是bringToFront的最终层
100 | */
101 | ViewParent viewParent = currentFocusView.getParent();
102 | if (viewParent != null && !(viewParent instanceof TVRecyclerView)) {
103 | currentFocusView.bringToFront();
104 | ((View) viewParent).postInvalidate();
105 | }
106 |
107 | Log.d(TAG, "onFocusIn:" + currentFocusView.toString());
108 |
109 | int focusRes = R.drawable.focus_normal;
110 |
111 | Rect newFocusEffectRect = new Rect();
112 |
113 | switch (getViewFocusType(currentFocusView)) {
114 | case FocusType.FOCUS_NORMAL:
115 | focusRes = R.drawable.focus_normal;
116 | setPaddingRect(focusNormalPaddingRect);
117 | break;
118 | case FocusType.FOCUS_POSTER://
119 | focusRes = R.drawable.focus_normal;
120 | setPaddingRect(focusPosterPaddingRect);
121 | break;
122 | case FocusType.FOCUS_TAB_VIEW://
123 | focusRes = R.drawable.focus_tab_view;
124 | setPaddingRect(focusTabViewPaddingRect);
125 | break;
126 |
127 | }
128 |
129 | if (getViewFocusTranslateAnim(currentFocusView)) {
130 | getNewFocusEffectScaleRect(currentFocusView, newFocusEffectRect, scale);
131 | } else {
132 | if (getViewFocusScaleAnim(currentFocusView)) {
133 | // 如果没有移动动画,那么焦点框和初始一样,让让放大动画的时候来撑大
134 | getNewFocusEffectScaleRect(currentFocusView, newFocusEffectRect, 1.0f);
135 | } else {
136 | // 如果没有放大动画,直接得到scale后的rect
137 | getNewFocusEffectScaleRect(currentFocusView, newFocusEffectRect, scale);
138 | }
139 | }
140 | focusInAnim(getViewFocusScaleAnim(currentFocusView), 1.0f, scale, scaleDuration);
141 |
142 | if (getViewFocusTranslateAnim(currentFocusView)) {
143 | Rect oldFocusEffectRect = new Rect();
144 | this.getGlobalVisibleRect(oldFocusEffectRect);
145 | tranlateFocusEffect(oldFocusEffectRect, newFocusEffectRect, scaleDuration);
146 | } else {
147 | changeFocusEffectLocation(newFocusEffectRect);
148 | }
149 | this.setBackgroundResource(focusRes);
150 | }
151 |
152 | @Override public void destory() {
153 | super.destory();
154 | focusNormalPaddingRect = null;
155 | focusTabViewPaddingRect = null;
156 | focusPosterPaddingRect = null;
157 | }
158 | }
159 |
--------------------------------------------------------------------------------
/library/src/main/java/com/skw/library/focus/FocusEffectViewUtil.java:
--------------------------------------------------------------------------------
1 | package com.skw.library.focus;
2 |
3 | import android.app.Activity;
4 | import android.app.Dialog;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 |
8 | import com.skw.library.R;
9 |
10 | /**
11 | * @创建人 weishukai
12 | * @创建时间 17/1/20 上午10:38
13 | * @类描述 一句话说明这个类是干什么的
14 | */
15 |
16 | public class FocusEffectViewUtil {
17 |
18 | private static final String TAG = "FocusEffectViewUtil";
19 |
20 | /**
21 | * 给activity添加焦点效果的view
22 | *
23 | * @param activity
24 | * @return
25 | */
26 | public static AbsFocusEffectView bindFocusEffectView(Activity activity) {
27 | if (activity == null) {
28 | return null;
29 | }
30 | AbsFocusEffectView absFocusEffectView = new FocusEffectView(activity.getApplicationContext());
31 | absFocusEffectView.setLayoutParams(new ViewGroup.LayoutParams(0, 0));
32 | absFocusEffectView.bindActivity(activity);
33 | return absFocusEffectView;
34 | }
35 |
36 | public static AbsFocusEffectView bindFocusEffectView(Dialog dialog) {
37 | if (dialog == null) {
38 | return null;
39 | }
40 | AbsFocusEffectView absFocusEffectView = new FocusEffectView(dialog.getContext());
41 | absFocusEffectView.setLayoutParams(new ViewGroup.LayoutParams(0, 0));
42 | absFocusEffectView.bindDialog(dialog);
43 | return absFocusEffectView;
44 | }
45 |
46 | public static AbsFocusEffectView bindFocusEffectView(View view) {
47 | if (view == null) {
48 | return null;
49 | }
50 | AbsFocusEffectView absFocusEffectView = new FocusEffectView(view.getContext());
51 | absFocusEffectView.setLayoutParams(new ViewGroup.LayoutParams(0, 0));
52 | absFocusEffectView.bindView(view);
53 | return absFocusEffectView;
54 | }
55 |
56 | /**
57 | * 更新焦点效果的位置
58 | *
59 | * @param view
60 | */
61 | public static void updateFocusEffect(View view) {
62 | if (view != null) {
63 | View rootView = view.getRootView();
64 | View focusEffectView = rootView.findViewById(R.id.focus_effect_view);
65 | if (focusEffectView != null) {
66 | AbsFocusEffectView absFocusEffectView = (AbsFocusEffectView) focusEffectView;
67 | absFocusEffectView.updateLocation();
68 | }
69 | }
70 | }
71 |
72 | public static void setFocusEffectVisible(View view, boolean isVisible) {
73 | if (view != null) {
74 | View rootView = view.getRootView();
75 | View focusEffectView = rootView.findViewById(R.id.focus_effect_view);
76 | if (focusEffectView != null) {
77 | AbsFocusEffectView absFocusEffectView = (AbsFocusEffectView) focusEffectView;
78 | if (isVisible) {
79 | absFocusEffectView.show();
80 | } else {
81 | absFocusEffectView.hide();
82 | }
83 |
84 | }
85 | }
86 | }
87 | }
88 |
--------------------------------------------------------------------------------
/library/src/main/java/com/skw/library/holder/RVHolder.java:
--------------------------------------------------------------------------------
1 | package com.skw.library.holder;
2 |
3 | import android.support.v7.widget.RecyclerView;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 |
7 | import com.skw.library.R;
8 | import com.skw.library.TVRecyclerView;
9 |
10 | /**
11 | * @创建人 weishukai
12 | * @创建时间 17/1/6 下午7:07
13 | * @类描述 一句话说明这个类是干什么的
14 | */
15 |
16 | public abstract class RVHolder