This commit is contained in:
jinyuer
2020-09-02 15:33:38 +08:00
parent 83b075884f
commit ca565aafc6
8 changed files with 136 additions and 40 deletions

View File

@@ -20,7 +20,7 @@ import entity.DiscoveryListEntity;
public class BaseRecycleViewAdapter<T1, T2 extends ViewDataBinding> extends RecyclerView.Adapter<BaseRecycleViewAdapter.BaseViewHolder> { public class BaseRecycleViewAdapter<T1, T2 extends ViewDataBinding> extends RecyclerView.Adapter<BaseRecycleViewAdapter.BaseViewHolder> {
private ArrayList<T1> list; private ArrayList<T1> list=new ArrayList<>();
private LayoutInflater inflater; private LayoutInflater inflater;
private Context context; private Context context;
private AdapterView.OnItemClickListener itemClickListener; private AdapterView.OnItemClickListener itemClickListener;
@@ -41,7 +41,6 @@ public class BaseRecycleViewAdapter<T1, T2 extends ViewDataBinding> extends Recy
public void setData(ArrayList<T1> list) { public void setData(ArrayList<T1> list) {
this.list.clear(); this.list.clear();
this.list = new ArrayList<>();
this.list.addAll(list); this.list.addAll(list);
notifyDataSetChanged(); notifyDataSetChanged();
} }

View File

@@ -73,7 +73,7 @@ public class DiscoveryFragment extends BaseFragment<FragmentDiscoveryBinding> im
private String mParam2; private String mParam2;
BaseActivity baseActivity; BaseActivity baseActivity;
private ProgressDialog progressDialog; private ProgressDialog progressDialog;
private ArrayList<DiscoveryListEntity> discoveryListEntities; private ArrayList<DiscoveryListEntity> discoveryListEntities = new ArrayList<>();
@Override @Override
protected int getLayoutId() { protected int getLayoutId() {
@@ -485,7 +485,7 @@ public class DiscoveryFragment extends BaseFragment<FragmentDiscoveryBinding> im
Log.e("pic", discoveryListEntity.getPic().get(0)); Log.e("pic", discoveryListEntity.getPic().get(0));
for (int i = 0; i < discoveryListEntity.getPic().size(); i++) { for (int i = 0; i < discoveryListEntity.getPic().size(); i++) {
if (discoveryListEntity.getPic().get(i).endsWith(".mp4")) { if (discoveryListEntity.getPic().get(i).endsWith(".mp4") || discoveryListEntity.getPic().get(i).endsWith(".avi")) {
ImageInfo imageInfo = new ImageInfo(); ImageInfo imageInfo = new ImageInfo();
imageInfo.setType(2); imageInfo.setType(2);
imageInfo.setBigImageUrl(discoveryListEntity.getPic().get(i)); imageInfo.setBigImageUrl(discoveryListEntity.getPic().get(i));
@@ -501,7 +501,7 @@ public class DiscoveryFragment extends BaseFragment<FragmentDiscoveryBinding> im
} }
}else { } else {
ImageInfo imageInfo = new ImageInfo(); ImageInfo imageInfo = new ImageInfo();
imageInfo.setType(1); imageInfo.setType(1);
imageInfo.setBigImageUrl(discoveryListEntity.getThumb()); imageInfo.setBigImageUrl(discoveryListEntity.getThumb());
@@ -520,7 +520,10 @@ public class DiscoveryFragment extends BaseFragment<FragmentDiscoveryBinding> im
private void getGankList(String myurl, Map<String, String> map, String msg, final int requstecode) { private void getGankList(String myurl, Map<String, String> map, String msg, final int requstecode) {
progressDialog.setMessage(msg); progressDialog.setMessage(msg);
progressDialog.setCancelable(false); progressDialog.setCancelable(false);
// progressDialog.show(); // if (page>1){
// progressDialog.show();
// }
mGankLoader = new Loader(); mGankLoader = new Loader();
Subscription subscription = mGankLoader.getMovie(myurl, map).subscribe(new Action1<Resultcode>() { Subscription subscription = mGankLoader.getMovie(myurl, map).subscribe(new Action1<Resultcode>() {
@@ -536,7 +539,7 @@ public class DiscoveryFragment extends BaseFragment<FragmentDiscoveryBinding> im
baseActivity.setToast(1, resultcode.msg); baseActivity.setToast(1, resultcode.msg);
} }
if (resultcode.status == 0) { if (resultcode.status == 0) {
intRecycleView(); // intRecycleView();
Gson gs = new Gson(); Gson gs = new Gson();
LinkedTreeMap adta = (LinkedTreeMap) resultcode.data; LinkedTreeMap adta = (LinkedTreeMap) resultcode.data;
String s = gs.toJson(adta); String s = gs.toJson(adta);
@@ -555,7 +558,9 @@ public class DiscoveryFragment extends BaseFragment<FragmentDiscoveryBinding> im
.placeholder(R.mipmap.icon_default_rectangle) .placeholder(R.mipmap.icon_default_rectangle)
.transform(new PicassoRoundTransform()) .transform(new PicassoRoundTransform())
.into(mDataBinding.head); .into(mDataBinding.head);
discoveryListEntities = new Gson().fromJson(array.toString(), type); ArrayList<DiscoveryListEntity> o = new Gson().fromJson(array.toString(), type);
discoveryListEntities.clear();
discoveryListEntities.addAll(o);
BaseRecycleViewAdapter baseRecycleViewAdapter = (BaseRecycleViewAdapter) mDataBinding.recyView.getAdapter(); BaseRecycleViewAdapter baseRecycleViewAdapter = (BaseRecycleViewAdapter) mDataBinding.recyView.getAdapter();
baseRecycleViewAdapter.setData(discoveryListEntities); baseRecycleViewAdapter.setData(discoveryListEntities);
page++; page++;
@@ -565,10 +570,12 @@ public class DiscoveryFragment extends BaseFragment<FragmentDiscoveryBinding> im
BaseRecycleViewAdapter baseRecycleViewAdapter = (BaseRecycleViewAdapter) mDataBinding.recyView.getAdapter(); BaseRecycleViewAdapter baseRecycleViewAdapter = (BaseRecycleViewAdapter) mDataBinding.recyView.getAdapter();
baseRecycleViewAdapter.setData(discoveryListEntities); baseRecycleViewAdapter.setData(discoveryListEntities);
int count = jsonObject.getInt("count"); Log.e("sizi", discoveryListEntities.size() + "");
if (discoveryListEntities.size() == count || o.isEmpty()) { // int count = jsonObject.getInt("count");
if (o.isEmpty()) {
mDataBinding.dw.finishLoadMoreWithNoMoreData(); mDataBinding.dw.finishLoadMoreWithNoMoreData();
} else { } else {
page++; page++;
} }

View File

@@ -54,8 +54,12 @@
android:layout_weight="1" android:layout_weight="1"
android:background="@color/white" android:background="@color/white"
app:srlEnableLoadMore="true" app:srlEnableLoadMore="true"
app:srlEnableLoadMoreWhenContentNotFull="true"> app:srlDisableContentWhenLoading="true"
>
<com.scwang.smartrefresh.layout.header.ClassicsHeader
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ScrollView <ScrollView
android:id="@+id/sv" android:id="@+id/sv"
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -105,6 +109,9 @@
</RelativeLayout> </RelativeLayout>
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>
<com.scwang.smartrefresh.layout.footer.ClassicsFooter
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout> </com.scwang.smartrefresh.layout.SmartRefreshLayout>
</LinearLayout> </LinearLayout>

View File

@@ -1,5 +1,8 @@
package com.lzy.ninegrid; package com.lzy.ninegrid;
import android.os.Parcel;
import android.os.Parcelable;
import java.io.Serializable; import java.io.Serializable;
/** /**
@@ -11,7 +14,7 @@ import java.io.Serializable;
* 修订历史: * 修订历史:
* ================================================ * ================================================
*/ */
public class ImageInfo implements Serializable { public class ImageInfo implements Serializable, Parcelable {
public String thumbnailUrl; public String thumbnailUrl;
public String bigImageUrl; public String bigImageUrl;
public int imageViewHeight; public int imageViewHeight;
@@ -19,6 +22,7 @@ public class ImageInfo implements Serializable {
public int imageViewX; public int imageViewX;
public int imageViewY; public int imageViewY;
public int type; public int type;
public String videoUrl;
public int getType() { public int getType() {
return type; return type;
@@ -86,6 +90,50 @@ public class ImageInfo implements Serializable {
", imageViewX=" + imageViewX + ", imageViewX=" + imageViewX +
", imageViewY=" + imageViewY + ", imageViewY=" + imageViewY +
", type=" + type + ", type=" + type +
", videoUrl='" + videoUrl + '\'' +
'}'; '}';
} }
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.thumbnailUrl);
dest.writeString(this.bigImageUrl);
dest.writeInt(this.imageViewHeight);
dest.writeInt(this.imageViewWidth);
dest.writeInt(this.imageViewX);
dest.writeInt(this.imageViewY);
dest.writeInt(this.type);
dest.writeString(this.videoUrl);
}
public ImageInfo() {
}
protected ImageInfo(Parcel in) {
this.thumbnailUrl = in.readString();
this.bigImageUrl = in.readString();
this.imageViewHeight = in.readInt();
this.imageViewWidth = in.readInt();
this.imageViewX = in.readInt();
this.imageViewY = in.readInt();
this.type = in.readInt();
this.videoUrl = in.readString();
}
public static final Creator<ImageInfo> CREATOR = new Creator<ImageInfo>() {
@Override
public ImageInfo createFromParcel(Parcel source) {
return new ImageInfo(source);
}
@Override
public ImageInfo[] newArray(int size) {
return new ImageInfo[size];
}
};
} }

View File

@@ -11,6 +11,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -32,7 +33,7 @@ public class NineGridView extends ViewGroup {
private int gridWidth; // 宫格宽度 private int gridWidth; // 宫格宽度
private int gridHeight; // 宫格高度 private int gridHeight; // 宫格高度
private List<ImageView> imageViews; private List<NineGridViewWrapper> imageViews;
private List<ImageInfo> mImageInfo; private List<ImageInfo> mImageInfo;
private NineGridViewAdapter mAdapter; private NineGridViewAdapter mAdapter;
@@ -94,8 +95,8 @@ public class NineGridView extends ViewGroup {
if (mImageInfo == null) return; if (mImageInfo == null) return;
int childrenCount = mImageInfo.size(); int childrenCount = mImageInfo.size();
for (int i = 0; i < childrenCount; i++) { for (int i = 0; i < childrenCount; i++) {
ImageView childrenView = (ImageView) getChildAt(i); NineGridViewWrapper childrenView = (NineGridViewWrapper) getChildAt(i);
int rowNum = i / columnCount; int rowNum = i / columnCount;
int columnNum = i % columnCount; int columnNum = i % columnCount;
int left = (gridWidth + gridSpacing) * columnNum + getPaddingLeft(); int left = (gridWidth + gridSpacing) * columnNum + getPaddingLeft();
@@ -103,14 +104,17 @@ public class NineGridView extends ViewGroup {
int right = left + gridWidth; int right = left + gridWidth;
int bottom = top + gridHeight; int bottom = top + gridHeight;
childrenView.layout(left, top, right, bottom); childrenView.layout(left, top, right, bottom);
if (mImageLoader != null) { if (mImageLoader != null) {
childrenView.setType(mImageInfo.get(i).type);
mImageLoader.onDisplayImage(getContext(), childrenView, mImageInfo.get(i).thumbnailUrl); mImageLoader.onDisplayImage(getContext(), childrenView, mImageInfo.get(i).thumbnailUrl);
} }
} }
} }
/** 设置适配器 */ /**
* 设置适配器
*/
public void setAdapter(@NonNull NineGridViewAdapter adapter) { public void setAdapter(@NonNull NineGridViewAdapter adapter) {
mAdapter = adapter; mAdapter = adapter;
List<ImageInfo> imageInfo = adapter.getImageInfo(); List<ImageInfo> imageInfo = adapter.getImageInfo();
@@ -160,24 +164,27 @@ public class NineGridView extends ViewGroup {
} }
} }
//修改最后一个条目,决定是否显示更多 //修改最后一个条目,决定是否显示更多
if (adapter.getImageInfo().size() > maxImageSize) { // if (adapter.getImageInfo().size() > maxImageSize) {
View child = getChildAt(maxImageSize - 1); // View child = getChildAt(maxImageSize - 1);
if (child instanceof NineGridViewWrapper) { // if (child instanceof NineGridViewWrapper) {
NineGridViewWrapper imageView = (NineGridViewWrapper) child; // NineGridViewWrapper imageView = (NineGridViewWrapper) child;
imageView.setMoreNum(adapter.getImageInfo().size() - maxImageSize); // imageView.setMoreNum(adapter.getImageInfo().size() - maxImageSize);
} // }
} // }
mImageInfo = imageInfo; mImageInfo = imageInfo;
requestLayout(); requestLayout();
} }
/** 获得 ImageView 保证了 ImageView 的重用 */ /**
private ImageView getImageView(final int position) { * 获得 ImageView 保证了 ImageView 的重用
ImageView imageView; */
private NineGridViewWrapper getImageView(final int position) {
NineGridViewWrapper imageView;
if (position < imageViews.size()) { if (position < imageViews.size()) {
imageView = imageViews.get(position); imageView = imageViews.get(position);
} else { } else {
imageView = mAdapter.generateImageView(getContext()); imageView = mAdapter.generateImageView(getContext(), mAdapter.getImageInfo().get(position).getType());
imageView.setOnClickListener(new OnClickListener() { imageView.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@@ -189,22 +196,30 @@ public class NineGridView extends ViewGroup {
return imageView; return imageView;
} }
/** 设置宫格间距 */ /**
* 设置宫格间距
*/
public void setGridSpacing(int spacing) { public void setGridSpacing(int spacing) {
gridSpacing = spacing; gridSpacing = spacing;
} }
/** 设置只有一张图片时的宽 */ /**
* 设置只有一张图片时的宽
*/
public void setSingleImageSize(int maxImageSize) { public void setSingleImageSize(int maxImageSize) {
singleImageSize = maxImageSize; singleImageSize = maxImageSize;
} }
/** 设置只有一张图片时的宽高比 */ /**
* 设置只有一张图片时的宽高比
*/
public void setSingleImageRatio(float ratio) { public void setSingleImageRatio(float ratio) {
singleImageRatio = ratio; singleImageRatio = ratio;
} }
/** 设置最大图片数 */ /**
* 设置最大图片数
*/
public void setMaxSize(int maxSize) { public void setMaxSize(int maxSize) {
maxImageSize = maxSize; maxImageSize = maxSize;
} }

View File

@@ -32,11 +32,13 @@ public abstract class NineGridViewAdapter implements Serializable {
* 如果需要自定义图片展示效果,重写此方法即可 * 如果需要自定义图片展示效果,重写此方法即可
* *
* @param context 上下文 * @param context 上下文
* @param type
* @return 生成的 ImageView * @return 生成的 ImageView
*/ */
protected ImageView generateImageView(Context context) { protected NineGridViewWrapper generateImageView(Context context, int type) {
NineGridViewWrapper imageView = new NineGridViewWrapper(context); NineGridViewWrapper imageView = new NineGridViewWrapper(context);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setType(type);
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
imageView.setImageResource(R.drawable.ic_default_color); imageView.setImageResource(R.drawable.ic_default_color);
return imageView; return imageView;
} }

View File

@@ -1,6 +1,8 @@
package com.lzy.ninegrid; package com.lzy.ninegrid;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Paint; import android.graphics.Paint;
@@ -13,6 +15,7 @@ import android.util.TypedValue;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.widget.ImageView; import android.widget.ImageView;
public class NineGridViewWrapper extends ImageView { public class NineGridViewWrapper extends ImageView {
private int moreNum = 0; //显示更多的数量 private int moreNum = 0; //显示更多的数量
@@ -21,7 +24,8 @@ public class NineGridViewWrapper extends ImageView {
private int textColor = 0xFFFFFFFF; //显示文字的颜色 private int textColor = 0xFFFFFFFF; //显示文字的颜色
private TextPaint textPaint; //文字的画笔 private TextPaint textPaint; //文字的画笔
private String msg = ""; //要绘制的文字 private String msg = "哈哈哈啊"; //要绘制的文字
private int mType;
public NineGridViewWrapper(Context context) { public NineGridViewWrapper(Context context) {
this(context, null); this(context, null);
@@ -44,14 +48,28 @@ public class NineGridViewWrapper extends ImageView {
textPaint.setColor(textColor); //设置文字颜色 textPaint.setColor(textColor); //设置文字颜色
} }
public void setType(int type) {
mType = type;
invalidate();
}
@Override @Override
protected void onDraw(Canvas canvas) { protected void onDraw(Canvas canvas) {
super.onDraw(canvas); super.onDraw(canvas);
if (moreNum > 0) { if (mType == 2) {
canvas.drawColor(maskColor); // canvas.drawColor(maskColor);
float baseY = getHeight() / 2 - (textPaint.ascent() + textPaint.descent()) / 2; // float baseY = getHeight() / 2 - (textPaint.ascent() + textPaint.descent()) / 2;
canvas.drawText(msg, getWidth() / 2, baseY, textPaint); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_image);
} canvas.translate(getWidth() / 2, getHeight() / 2);
canvas.drawBitmap(bitmap, -50, -50, null);
}
// if (mType == 2) {
// Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.phone);
// // canvas.translate(getWidth() / 2, getHeight() / 2);
// canvas.drawBitmap(bitmap, 0, 0, null);
// }
// }
} }
@Override @Override

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB