+ * 等间距需满足两个条件: + * 1.各个模块的大小相等,即 各列的left+right 值相等; + * 2.各列的间距相等,即 前列的right + 后列的left = 列间距; + *
+ * 在{@link #getItemOffsets(Rect, View, RecyclerView, RecyclerView.State)} 中针对 outRect 的left 和right 满足这两个条件即可 + *
+ * 作者 : shiguotao
+ * 版本 : V1
+ * 创建时间 : 2020/3/19 4:54 PM
+ */
+public class GridSpaceItemDecoration extends RecyclerView.ItemDecoration {
+
+ private final String TAG = "GridSpaceItemDecoration";
+
+ private int mSpanCount;//横条目数量
+ private int mRowSpacing;//行间距
+ private int mColumnSpacing;// 列间距
+
+ /**
+ * @param spanCount 列数
+ * @param rowSpacing 行间距
+ * @param columnSpacing 列间距
+ */
+ public GridSpaceItemDecoration(int spanCount, int rowSpacing, int columnSpacing) {
+ this.mSpanCount = spanCount;
+ this.mRowSpacing = rowSpacing;
+ this.mColumnSpacing = columnSpacing;
+ }
+
+ @Override
+ public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
+ int position = parent.getChildAdapterPosition(view); // 获取view 在adapter中的位置。
+ int column = position % mSpanCount; // view 所在的列
+
+ outRect.left = column * mColumnSpacing / mSpanCount; // column * (列间距 * (1f / 列数))
+ outRect.right = mColumnSpacing - (column + 1) * mColumnSpacing / mSpanCount; // 列间距 - (column + 1) * (列间距 * (1f /列数))
+
+ Log.e(TAG, "position:" + position
+ + " columnIndex: " + column
+ + " left,right ->" + outRect.left + "," + outRect.right);
+
+ // 如果position > 行数,说明不是在第一行,则不指定行高,其他行的上间距为 top=mRowSpacing
+ if (position >= mSpanCount) {
+ outRect.top = mRowSpacing; // item top
+ }
+ }
+}
diff --git a/app/src/main/res/drawable-hdpi/dialer_icon.png b/app/src/main/res/drawable-hdpi/dialer_icon.png
new file mode 100644
index 0000000..fcb8c3a
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/dialer_icon.png differ
diff --git a/app/src/main/res/drawable-hdpi/home_quick_app.png b/app/src/main/res/drawable-hdpi/home_quick_app.png
new file mode 100644
index 0000000..c8e5439
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/home_quick_app.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_selected.png b/app/src/main/res/drawable-hdpi/icon_selected.png
new file mode 100644
index 0000000..d9560f2
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_selected.png differ
diff --git a/app/src/main/res/drawable-hdpi/icon_unselected.png b/app/src/main/res/drawable-hdpi/icon_unselected.png
new file mode 100644
index 0000000..d21c906
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/icon_unselected.png differ
diff --git a/app/src/main/res/drawable-hdpi/more.png b/app/src/main/res/drawable-hdpi/more.png
new file mode 100644
index 0000000..b5fb61b
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/more.png differ
diff --git a/app/src/main/res/drawable/app_select_background.xml b/app/src/main/res/drawable/app_select_background.xml
new file mode 100644
index 0000000..d4c331c
--- /dev/null
+++ b/app/src/main/res/drawable/app_select_background.xml
@@ -0,0 +1,18 @@
+
+