不多说上代码

public abstract class NineGridAdapter {

protected Context context;

protected List list;

public NineGridAdapter(Context context, List list) {

this.context = context;

this.list = list;

}

public abstract int getCount();

public abstract String getUrl(int positopn);

public abstract Object getItem(int position);

public abstract long getItemId(int position);

public abstract View getView(int i, View view);

}

package com.wd.weidologin.pic;

import android.content.Context;

import android.util.AttributeSet;

import android.util.DisplayMetrics;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ImageView;

public class NineGridlayout extends ViewGroup {

private NineGridAdapter adapter;

private OnItemClickListerner onItemClickListerner;

// 行间距

private int lineSpace;

//列间距

private int gap;

private final int DEFAULT_WIDTH = 140;

private int columns;//

private int rows;//

private int totalWidth;

private Context context;

int singleWidth = 0, singleHeight = 0;

private int defaultWidth, defaultHeight;

private int oldCount;

public NineGridlayout(Context context) {

this(context, null);

}

public NineGridlayout(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

public NineGridlayout(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

this.context = context;

gap = dip2px(context, 10);

lineSpace = dip2px(context,10);

ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

defaultWidth = defaultHeight = dip2px(context, DEFAULT_WIDTH);

}

public void setDefaultWidth(int defaultWidth) {

this.defaultWidth = defaultWidth;

}

public void setDefaultHeight(int defaultHeight) {

this.defaultHeight = defaultHeight;

}

public void setAdapter(NineGridAdapter adapter) {

this.adapter = adapter;

if (adapter == null) {

return;

}

//初始化布局形状

generateChildrenLayout(adapter.getCount());

//这里做一个重用view的处理

// if (oldCount == 0) {

removeAllViews();

for (int i = 0; i < adapter.getCount(); i++) {

View itemView = adapter.getView(i, null);

addView(itemView, generateDefaultLayoutParams());

}

// }

/*else {

//以前添加过view

int newViewCount = adapter.getCount();

if (oldCount > newViewCount) {

removeViews(newViewCount - 1, oldCount - newViewCount);

for (int i = 0; i < newViewCount - 1; i++) {

adapter.getView(i, getChildAt(i));

}

} else if (oldCount < newViewCount) {

for (int i = 0; i < newViewCount - oldCount; i++) {

View itemView = adapter.getView(i, null);

addView(itemView, generateDefaultLayoutParams());

}

}

}*/

oldCount = adapter.getCount();

requestLayout();

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

int widthMode = MeasureSpec.getMode(widthMeasureSpec);

int heightMode = MeasureSpec.getMode(heightMeasureSpec);

int sizeWidth = MeasureSpec.getSize(widthMeasureSpec);

int sizeHeight = MeasureSpec.getSize(heightMeasureSpec);

totalWidth = sizeWidth - getPaddingLeft() - getPaddingRight();

if (adapter != null && adapter.getCount() > 0) {

int measureWidth, measureHeight;

int childrenCount = adapter.getCount();

if (childrenCount == 1) {

singleWidth = defaultWidth;

singleHeight = defaultHeight;

} else {

singleWidth = (totalWidth - gap * (3 - 1)) / 3;

singleHeight = singleWidth;

}

measureChildren(MeasureSpec.makeMeasureSpec(singleWidth, MeasureSpec.EXACTLY),

MeasureSpec.makeMeasureSpec(singleHeight, MeasureSpec.EXACTLY));

measureWidth = singleWidth * columns + gap * (columns - 1);

measureHeight = singleHeight * rows + lineSpace * (rows - 1);

setMeasuredDimension(sizeWidth, measureHeight);

}

}

@Override

protected void onLayout(boolean changed, int l, int t, int r, int b) {

layoutChildrenView();

}

private void layoutChildrenView() {

if (adapter == null || adapter.getCount() == 0) {

return;

}

int childrenCount = adapter.getCount();

for (int i = 0; i < childrenCount; i++) {

int[] position = findPosition(i);

int left = (singleWidth + gap) * position[1] + getPaddingLeft();

int top = (singleHeight + lineSpace) * position[0] + getPaddingTop();

int right = left + singleWidth;

int bottom = top + singleHeight;

ImageView childrenView = (ImageView) getChildAt(i);

if (childrenCount == 1) {

//只有一张图片

childrenView.setScaleType(ImageView.ScaleType.FIT_CENTER);

} else {

childrenView.setScaleType(ImageView.ScaleType.CENTER_CROP);

}

final int itemPosition = i;

childrenView.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

if (onItemClickListerner != null) {

onItemClickListerner.onItemClick(v, itemPosition);

}

}

});

childrenView.layout(left, top, right, bottom);

}

}

private int[] findPosition(int childNum) {

int[] position = new int[2];

for (int i = 0; i < rows; i++) {

for (int j = 0; j < columns; j++) {

if ((i * columns + j) == childNum) {

position[0] = i;//行

position[1] = j;//列

break;

}

}

}

return position;

}

public int getGap() {

return gap;

}

public void setGap(int gap) {

this.gap = gap;

}

/**

* 根据图片个数确定行列数量

* 对应关系如下

* numrowcolumn

* 1 11

* 2 12

* 3 13

* 4 22

* 5 23

* 6 23

* 7 33

* 8 33

* 9 33

*

* @param length

*/

private void generateChildrenLayout(int length) {

if (length <= 3) {

rows = 1;

columns = length;

} else if (length <= 6) {

rows = 2;

columns = 3;

if (length == 4) {

columns = 2;

}

} else {

rows = 3;

columns = 3;

}

}

/**

* dp to px

*/

public static int dip2px(Context context, double dpValue) {

final float scale = context.getResources().getDisplayMetrics().density;

return (int) (dpValue * scale + 0.5f);

}

public void setOnItemClickListerner(OnItemClickListerner onItemClickListerner) {

this.onItemClickListerner = onItemClickListerner;

}

public interface OnItemClickListerner {

public void onItemClick(View view, int position);

}

}

package com.wd.weidologin.home;

import androidx.appcompat.app.AppCompatActivity;

import androidx.recyclerview.widget.GridLayoutManager;

import androidx.recyclerview.widget.RecyclerView;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.content.SharedPreferences;

import android.graphics.Color;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ImageView;

import android.widget.Toast;

import com.bumptech.glide.Glide;

import com.google.gson.Gson;

import com.wd.weidologin.R;

import com.wd.weidologin.adapter.AttentionRequestAdapter;

import com.wd.weidologin.okutil.okRE;

import com.wd.weidologin.pic.NineGridAdapter;

import com.wd.weidologin.pic.NineGridlayout;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

public class MainActivity2 extends AppCompatActivity {

private RecyclerView ry;

private AttentionRequestAdapter attentionRequestAdapter;

private ArrayList lists=new ArrayList<>();

private NineGridlayout mGV;

private CircleBean.ResultEntity result;

private String picture;

private List list = new ArrayList();

private Adapter adapter;

public static final String ACTION ="com.example.casts";

private String msg;

private SharedPreferences canfig;

private SharedPreferences.Editor edited;

private String imageUrl = "http://pic1.nipic.com/2008-09-08/200898163242920_2.jpg";//如果没有接口可以用这个简单代替这个就不需要进行切割了

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main2);

init();//(有接口的情况)

list.add(imageUrl);//没有接口的情况 ---====================

if (adapter == null){

adapter = new Adapter(this,list);

mGV.setAdapter(adapter);

}

mGV.setOnItemClickListerner(new NineGridlayout.OnItemClickListerner() {

@Override

public void onItemClick(View view, int position) {

Toast.makeText(getApplicationContext(), String.valueOf(position),Toast.LENGTH_LONG).show();

}

});//没有接口的情况 ---====================不要混

}

private void init() {

// int sickCircleId = getIntent().getIntExtra("sickCircleId", 0);

canfig = getSharedPreferences("canfig", Context.MODE_PRIVATE);

edited = canfig.edit();

int resultkey = canfig.getInt("resultkey", 0);

String url="http:....."+resultkey;

HashMap headmap = new HashMap<>();

headmap.put("userId","287");

headmap.put("sessionId","1604985492394287");

okRE.getInstance().getCircledetails(url,headmap, new okRE.NetCallBack() {

@Override

public void onSuccess(String string) {

CircleBean circleBean = new Gson().fromJson(string, CircleBean.class);

picture = circleBean.getResult().getPicture();

Toast.makeText(MainActivity2.this, picture+"", Toast.LENGTH_SHORT).show();

mGV = findViewById(R.id.d);

String[] split = picture.split(",");//一般多图上传后需要将图片进行切割

if (picture.equals("")){//在这里我进行了是否有图片的判断以免没有图片还进行占位

mGV.setVisibility(View.GONE);

}

for (int i = 0; i < split.length; i++) {

list.add(split[i]);

}

if (adapter == null){

adapter = new Adapter(MainActivity2.this,list);

mGV.setAdapter(adapter);

}

mGV.setOnItemClickListerner(new NineGridlayout.OnItemClickListerner() {图片点击事件

@Override

public void onItemClick(View view, int position) {

Toast.makeText(getApplicationContext(), String.valueOf(position),Toast.LENGTH_LONG).show();

}

});

}

@Override

public void onFail(String string) {

// Toast.makeText(MainActivity.this, string+"", Toast.LENGTH_SHORT).show();

}

});

}

private class Adapter extends NineGridAdapter {//适配器

public Adapter(Context context, List list){

super(context,list);

}

@Override

public int getCount() {

return list == null?0:list.size();

}

@Override

public String getUrl(int positon) {

return getItem(positon) == null ? null : getItem(positon).toString();

}

@Override

public Object getItem(int position) {

return (list == null) ? null : list.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int i, View view) {

ImageView imageView = new ImageView(getApplicationContext());

ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

imageView.setBackgroundColor(Color.parseColor("#f5f5f5"));

imageView.setLayoutParams(lp);

Glide.with(context).load(getUrl(i)).into(imageView);

return imageView;

}

}

}

最后因为这个包含网络请求所以需要进行设置

在res下创建xml文件夹创建network_security_config.xml

放到

并且添加网络权限

网路请求请看以往博客 多图上传请看以往博客或者我上传的代码,后续我会将全部整合上传demo

感谢观看

到此这篇关于Android 多图上传后将图片进行九宫格展示的文章就介绍到这了,更多相关Android 多图展示九宫格内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

九宫格拼图android代码,Android 多图上传后将图片进行九宫格展示的实例代码相关推荐

  1. ueditor百度编辑器中,多图上传后,图片顺序乱掉的处理方法

    上传后,图片的顺序和预期的不一致,需要修改ueditor的源码. 一.找到editor/dialogs/attachment/attachment.js文件 1.将_this.fileList.pus ...

  2. layui 多图上传和删除图片

    显示层 <div class="layui-form-item layui-col-md-offset1 layui-col-md10"><label class ...

  3. Unity Android通过拍照和相册上传头像(图片)

    Unity点击按钮调用AS中显示对话框选择是从相册中上传还是拍照上传,如果是相册直接获得路径传给Unity使用,如果是拍照,先拍照保存在本地,再将路径传递给Unity使用 Android中提供了Int ...

  4. 如何实现上传多个图片并依次展示_js前端实现多图图片上传预览的两个方法(推荐)...

    一.将图片转成icon码的实现方式 html代码: js代码 //图片预览功能 function previewImage(file,imgNum) { var MAXWIDTH = 200; var ...

  5. 如何实现上传多个图片并依次展示_如何在一页PPT中插入多张图片,并保持其美感...

    一页PPT要插入多张图片,你在制作PPT中一定遇到过这样的情况.我的建议是:与其一开始就去考虑用什么设计效果,不如先理清楚图片之间的关系如何. 我们大致可以把一页PPT中插入多张图片的情况分为两种. ...

  6. Kindeditor 图片粘贴上传后设置图片属性

    之前转载过一篇 Kindeditor 图片粘贴上传(https://blog.csdn.net/Dongguabai/article/details/100116608)的博客.但是还是存在一个问题, ...

  7. 如何实现上传多个图片并依次展示_Html5实现单张、多张图片上传功能

    前言 今天我们聊一聊图片上传,单张Or多张 ,如今,各大图片上传插件数不胜数,例如:Jquery的 verupload.js,jQuery File Upload.Uploadify.jQuery.f ...

  8. 如何实现上传多个图片并依次展示_如何在一张ppt中插入多张图片并能依次播放...

    我们在做PPT的时候基本上都是在一个页面里加入一张图片,这样会显得单调,那么怎样在一个页面里加入多张图并且能够依次显示呢?今天就具体讲解一下. 我们首先用鼠标点击桌面Microsoft PowerPo ...

  9. 如何实现上传多个图片并依次展示_微信如何一次性发送上传多张图片的方法介绍...

    我们使用微信发送图片给朋友或者上传朋友圈时,会显示最多只能一次发送9张照片.有时这样会显得非常麻烦,会打乱我们上传图片的排列顺序.那么我们该如何一次性上传9张以上的图片呢?下面来看看小编带来的详细方法 ...

最新文章

  1. Windows SharePoint Services 3.0 Tools: Visual Studio 2005 Extensions发布1.1 CTP版本扩展
  2. android根据中心裁剪图片,拍照,选择照片并进行裁剪,适配Android 7.0
  3. 【例7.4】 循环比赛日程表
  4. 连点脚本java,按键精灵如何设置自动连续点击 自动连点脚本设置教程
  5. Qt点击按钮两次才弹出菜单如何解决
  6. 1.7 爬取汽车之家实战
  7. 三角函数和复指数函数的转化_【导数压轴】当三角函数遇到导数02
  8. oracle数据库外联,Oracle数据库-关于外联接
  9. 中国六大最忙和六大最懒城市
  10. linux系统指令带有单引号是啥意思,每天一个Linux命令之shell单引号和双引号的经典解释...
  11. 解决EMD端点效应的方法比较
  12. excel从右边查找字符并截取
  13. 在线学习python
  14. 盘点WinCE6.0下的小游戏
  15. dagum基尼系数分析全流程
  16. camera中文版软件 ip_ip camera软件下载-IP Camera Viewer(网络摄像机监控软件)下载 v4.09官方版--pc6下载站...
  17. 天龙八部服务器列表文件,技术编辑设置win8系统天龙八部无法打开服务器列表的的办法...
  18. 对QQ通信协议的讨论
  19. 有ppt文档翻译软件吗?如何翻译整篇ppt文档
  20. linux more 下一页_linux系统more命令

热门文章

  1. 基于Python3.6和Opencv3的活动轮廓模型--CV和RSF
  2. 络腮胡子的男程序员们都在怎么刮胡子呢?应该用电推子来刮胡子
  3. c语言循环语循环控制,C语言.控制语循环语句.ppt
  4. 038 Divisible Subsequences
  5. 视频转文字怎么操作?这些方法值得收藏
  6. 软件项目管理思维导图(转载)
  7. IdentityServer4 (IDS4) 快速入门
  8. 为什么python文件会闪退_困扰已久的问题--python文件打开方式?为什么打开py文件会闪退!...
  9. XCode 3 中我的常用快捷键
  10. Could not autowire. No beans of 'StudentService' type found