Skip to content

Commit

Permalink
优化代码
Browse files Browse the repository at this point in the history
  • Loading branch information
jdsjlzx committed Jan 9, 2017
1 parent 6244e52 commit 3d9624b
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 38 deletions.
14 changes: 7 additions & 7 deletions LRecyclerview_library/LRecyclerview_library.iml
Original file line number Diff line number Diff line change
Expand Up @@ -63,20 +63,20 @@
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,20 @@
import android.support.v7.widget.RecyclerView.LayoutManager;
import android.support.v7.widget.RecyclerView.State;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;

import com.github.jdsjlzx.recyclerview.LRecyclerView;
import com.github.jdsjlzx.recyclerview.LRecyclerViewAdapter;

public class GridItemDecoration extends RecyclerView.ItemDecoration {
private int V_Space;
private int H_Space;
private int verticalSpace;
private int horizontalSpace;
private Paint mPaint;

public GridItemDecoration(int H_Space, int V_Space, int colour) {
this.H_Space = H_Space;
this.V_Space = V_Space;
public GridItemDecoration(int horizontalSpace, int verticalSpace, int colour) {
this.horizontalSpace = horizontalSpace;
this.verticalSpace = verticalSpace;
mPaint = new Paint();
mPaint.setColor(colour);
}
Expand Down Expand Up @@ -59,13 +58,11 @@ public void drawHorizontal(Canvas c, RecyclerView parent) {
LRecyclerViewAdapter adapter = (LRecyclerViewAdapter) parent.getAdapter();
for (int i = 0; i < childCount; i++) {
if ((recyclerView.isOnTop() && (adapter.isHeader(i) || adapter.isRefreshHeader(i))) || adapter.isFooter(i)) {
Log.d("horizontal---no-->", String.valueOf(i) + "----" + childCount);
c.drawRect(0, 0, 0, 0, mPaint);
} else {
Log.d("horizontal---yes-->", String.valueOf(i));
final View child = parent.getChildAt(i);
final int top = child.getBottom();
final int bottom = top + V_Space;
final int bottom = top + verticalSpace;
int left = child.getLeft();
int right = child.getRight();
c.drawRect(left, top, right, bottom, mPaint);
Expand All @@ -84,9 +81,9 @@ public void drawVertical(Canvas c, RecyclerView parent) {
final View child = parent.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
final int top = child.getTop();
final int bottom = child.getBottom() + V_Space;
final int bottom = child.getBottom() + verticalSpace;
final int left = child.getRight() + params.rightMargin;
final int right = left + H_Space;
final int right = left + horizontalSpace;
c.drawRect(left, top, right, bottom, mPaint);
}

Expand All @@ -104,10 +101,8 @@ private boolean isLastRaw(RecyclerView parent, int pos, int spanCount, int child
LRecyclerViewAdapter adapter = (LRecyclerViewAdapter) parent.getAdapter();
if (layoutManager instanceof GridLayoutManager) {
int leftCount = childCount - childCount % spanCount;//3
Log.d("left--->", String.valueOf(leftCount));
//leftCount:若childCount能被span整除为childCount否则为去掉最后一行的item总数
if ((pos - adapter.getHeaderViews().size() + 1) > leftCount) {
Log.d("no_draw------->", String.valueOf(pos));
return true;
}
}
Expand All @@ -132,38 +127,36 @@ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State s
int itemPosition = parent.getChildAdapterPosition(view);
int spanCount = getSpanCount(parent);
int childCount = parent.getAdapter().getItemCount();
Log.d("position------->", String.valueOf(itemPosition));
LRecyclerViewAdapter adapter = (LRecyclerViewAdapter) parent.getAdapter();
if (adapter.isFooter(itemPosition) || adapter.isHeader(itemPosition) || adapter.isRefreshHeader(itemPosition)) {
//header,footer不进行绘制
outRect.set(0, 0, 0, 0);
} else {
if (!(parent.getLayoutManager() instanceof GridLayoutManager)) {
//LinearLayoutManager
Log.d("manager--------->", "LinearLayoutManager: ");
if (itemPosition == (childCount - 2 - adapter.getHeaderViews().size()))
outRect.set(0, 0, 0, 0);
else
outRect.set(0, 0, 0, V_Space);
outRect.set(0, 0, 0, verticalSpace);
} else {
//GridLayoutManager
if (isLastRaw(parent, itemPosition, spanCount, childCount - 2 - adapter.getHeaderViews().size())) {
//最后一行
if (isLastColumn(parent, itemPosition, spanCount)) {
// 最后一行最后一列
outRect.set(0, 0, 0, V_Space);
outRect.set(0, 0, 0, verticalSpace);
} else {
// 最后一行不是最后一列
outRect.set(0, 0, H_Space, V_Space);
outRect.set(0, 0, horizontalSpace, verticalSpace);
}
} else {
//最后一列
if (isLastColumn(parent, itemPosition, spanCount)) {
// 最后一列最后一行
outRect.set(0, 0, 0, V_Space);
outRect.set(0, 0, 0, verticalSpace);
} else {
// 最后一列非最后一行
outRect.set(0, 0, H_Space, V_Space);
outRect.set(0, 0, horizontalSpace, verticalSpace);
}
}

Expand Down Expand Up @@ -216,26 +209,26 @@ public Builder setColor(@ColorInt int color) {


//通过dp设置垂直间距
public Builder setmVertical(@DimenRes int mVertical) {
this.mVertical = mResources.getDimensionPixelSize(mVertical);
public Builder setVertical(@DimenRes int vertical) {
this.mVertical = mResources.getDimensionPixelSize(vertical);
return this;
}

//通过px设置垂直间距
public Builder setmVertical(float mVertical) {
public Builder setVertical(float mVertical) {
this.mVertical = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, mVertical, mResources.getDisplayMetrics());
return this;
}

//通过dp设置水平间距
public Builder setmHorizontal(@DimenRes int mHorizontal) {
this.mHorizontal = mResources.getDimensionPixelSize(mHorizontal);
public Builder setHorizontal(@DimenRes int horizontal) {
this.mHorizontal = mResources.getDimensionPixelSize(horizontal);
return this;
}

//通过px设置水平间距
public Builder setmHorizontal(float mHorizontal) {
this.mHorizontal = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, mHorizontal, mResources.getDisplayMetrics());
public Builder setHorizontal(float horizontal) {
this.mHorizontal = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, horizontal, mResources.getDisplayMetrics());
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,9 @@ public void setPullRefreshEnabled(boolean enabled) {
}

public void setLoadMoreEnabled(boolean enabled) {
if(mWrapAdapter == null){
throw new NullPointerException("mWrapAdapter cannot be null, please make sure the variable mWrapAdapter have been initialized.");
}
mLoadMoreEnabled = enabled;
if (!enabled) {
if(mWrapAdapter.getFooterViewsCount() > 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
android:id="@+id/refresh_status_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#666666"
android:textColor="#B5B5B5"
android:text="@string/listview_header_hint_normal" />

<LinearLayout
Expand Down
15 changes: 12 additions & 3 deletions app/src/main/java/com/lzx/demo/ui/EndlessGridLayoutActivity.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.lzx.demo.ui;

import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
Expand All @@ -9,6 +10,7 @@
import android.view.MenuItem;

import com.github.jdsjlzx.ItemDecoration.GridItemDecoration;
import com.github.jdsjlzx.ItemDecoration.SpacesItemDecoration;
import com.github.jdsjlzx.interfaces.OnLoadMoreListener;
import com.github.jdsjlzx.interfaces.OnNetWorkErrorListener;
import com.github.jdsjlzx.interfaces.OnRefreshListener;
Expand Down Expand Up @@ -66,9 +68,16 @@ public void onCreate(Bundle savedInstanceState) {

//mRecyclerView.setFootViewColor(R.color.colorAccent, R.color.dark ,android.R.color.white);

int spacing = getResources().getDimensionPixelSize(R.dimen.dp_10);
//mRecyclerView.addItemDecoration(SpacesItemDecoration.newInstance(spacing, spacing, manager.getSpanCount(), Color.GRAY));
mRecyclerView.addItemDecoration(new GridItemDecoration(this));
int spacing = getResources().getDimensionPixelSize(R.dimen.dp_4);
mRecyclerView.addItemDecoration(SpacesItemDecoration.newInstance(spacing, spacing, manager.getSpanCount(), Color.GRAY));

//根据需要选择使用GridItemDecoration还是SpacesItemDecoration
GridItemDecoration divider = new GridItemDecoration.Builder(this)
.setHorizontal(R.dimen.default_divider_padding)
.setVertical(R.dimen.default_divider_padding)
.setColorResource(R.color.split)
.build();
//mRecyclerView.addItemDecoration(divider);

mRecyclerView.setHasFixedSize(true);

Expand Down

0 comments on commit 3d9624b

Please sign in to comment.