广告
返回顶部
首页 > 资讯 > 精选 >Android如何实现朋友圈多图显示功能
  • 385
分享到

Android如何实现朋友圈多图显示功能

android 2023-05-30 17:05:35 385人浏览 泡泡鱼
摘要

小编给大家分享一下Android如何实现朋友圈多图显示功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下Android实现朋友圈评论回复列表Andro

小编给大家分享一下Android如何实现朋友圈多图显示功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

具体内容如下

Android实现朋友圈评论回复列表

Android实现朋友圈点赞列表

Android实现朋友圈多图显示功能

正文

先看一下效果图:

Android如何实现朋友圈多图显示功能

MultiImageView:

public class MultiImageView extends LinearLayout { public static int MAX_WIDTH = 0; // 照片的Url列表 private List<String> imagesList;  private int pxOneMaxWandH; // 单张图最大允许宽高 private int pxMoreWandH = 0;// 多张图的宽高 private int pxImagePadding = LvDPUtil.dip2px(3);// 图片间的间距 private int MAX_PER_ROW_COUNT = 3;// 每行显示最大数 private LayoutParams onePicPara; private LayoutParams morePara, moreParaColumnFirst; private LayoutParams rowPara; private OnItemClickListener mOnItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener) { mOnItemClickListener = onItemClickListener; } public MultiImageView(Context context) { super(context); } public MultiImageView(Context context, AttributeSet attrs) { super(context, attrs); } public void setList(List<String> lists) throws IllegalArgumentException { if (lists == null) {  throw new IllegalArgumentException("imageList is null..."); } imagesList = lists; if (MAX_WIDTH > 0) {  // 如果需要两张和四张图横向铺满,这里去掉注释即可。//  if (lists.size() == 2 || lists.size() == 4) {//  pxMoreWandH = (MAX_WIDTH - pxImagePadding) / 2;//  } else {  pxMoreWandH = (MAX_WIDTH - pxImagePadding * 2) / 3; //解决右侧图片和内容对不齐问题//  }  pxOneMaxWandH = MAX_WIDTH * 2 / 3; // 一张图的时候,图片宽度  initImageLayoutParams(); } initView(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (MAX_WIDTH == 0) {  int width = measureWidth(widthMeasureSpec);  if (width > 0) {  MAX_WIDTH = width - getPaddingLeft() - getPaddingRight();  if (imagesList != null && imagesList.size() > 0) {   setList(imagesList);  }  } } super.onMeasure(widthMeasureSpec, heightMeasureSpec); }  private int measureWidth(int measureSpec) { int result = 0; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if (specMode == MeasureSpec.EXACTLY) {  // We were told how big to be  result = specSize; } else {  // Measure the text  // result = (int) mTextPaint.measureText(mText) + getPaddingLeft()  // + getPaddingRight();  if (specMode == MeasureSpec.AT_MOST) {  // Respect AT_MOST value if that was what is called for by  // measureSpec  result = Math.min(result, specSize);  } } return result; } private void initImageLayoutParams() { int wrap = LayoutParams.WRAP_CONTENT; int match = LayoutParams.MATCH_PARENT; onePicPara = new LayoutParams(pxOneMaxWandH, wrap); moreParaColumnFirst = new LayoutParams(pxMoreWandH, pxMoreWandH); morePara = new LayoutParams(pxMoreWandH, pxMoreWandH); morePara.setMargins(pxImagePadding, 0, 0, 0); rowPara = new LayoutParams(match, wrap); } // 根据imageView的数量初始化不同的View布局,还要为每一个View作点击效果 private void initView() { this.setOrientation(VERTICAL); this.removeAllViews(); if (MAX_WIDTH == 0) {  //为了触发onMeasure()来测量MultiImageView的最大宽度,MultiImageView的宽设置为match_parent  addView(new View(getContext()));  return; } if (imagesList == null || imagesList.size() == 0) {  return; } if (imagesList.size() == 1) {  addView(createImageView(0, false)); } else {  int allCount = imagesList.size();  if (allCount == 4) {  MAX_PER_ROW_COUNT = 2;  } else {  MAX_PER_ROW_COUNT = 3;  }  int rowCount = allCount / MAX_PER_ROW_COUNT   + (allCount % MAX_PER_ROW_COUNT > 0 ? 1 : 0);// 行数  for (int rowCursor = 0; rowCursor < rowCount; rowCursor++) {  LinearLayout rowLayout = new LinearLayout(getContext());  rowLayout.setOrientation(LinearLayout.HORIZONTAL);  rowLayout.setLayoutParams(rowPara);  if (rowCursor != 0) {   rowLayout.setPadding(0, pxImagePadding, 0, 0);  }  int columnCount = allCount % MAX_PER_ROW_COUNT == 0 ? MAX_PER_ROW_COUNT   : allCount % MAX_PER_ROW_COUNT;//每行的列数  if (rowCursor != rowCount - 1) {   columnCount = MAX_PER_ROW_COUNT;  }  addView(rowLayout);  int rowOffset = rowCursor * MAX_PER_ROW_COUNT;// 行偏移  for (int columnCursor = 0; columnCursor < columnCount; columnCursor++) {   int position = columnCursor + rowOffset;   rowLayout.addView(createImageView(position, true));  }  } } } private ImageView createImageView(final int position, final boolean isMultiImage) { String url = ""; if (!TextUtils.isEmpty(imagesList.get(position))) {  url = imagesList.get(position); } ImageView imageView = new ColorFilterImageView(getContext()); if (isMultiImage) {  imageView.setScaleType(ScaleType.CENTER_CROP);  imageView.setLayoutParams(position % MAX_PER_ROW_COUNT == 0 ? moreParaColumnFirst : morePara); } else {  imageView.setAdjustViewBounds(true);  imageView.setScaleType(ScaleType.FIT_START);  imageView.setMaxHeight(pxOneMaxWandH);  imageView.setLayoutParams(onePicPara); } imageView.setId(url.hashCode()); imageView.setOnClickListener(new OnClickListener() {  @Override  public void onClick(View v) {  if (mOnItemClickListener != null) {   mOnItemClickListener.onItemClick(v, position);  }  } }); // 加载网络图片/设置图片显示 Glide.with(getContext()).load(url).into(imageView); return imageView; } public interface OnItemClickListener { void onItemClick(View view, int position); }}

点击有阴影的 ImageView :

public class ColorFilterImageView extends ImageView implements OnTouchListener { public ColorFilterImageView(Context context) { this(context, null, 0); } public ColorFilterImageView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public ColorFilterImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { setOnTouchListener(this); } @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) {  case MotionEvent.ACTION_DOWN: // 按下时图像变灰  setColorFilter(Color.GRAY, Mode.MULTIPLY);  break;  case MotionEvent.ACTION_UP: // 手指离开或取消操作时恢复原色  case MotionEvent.ACTION_CANCEL:  setColorFilter(Color.TRANSPARENT);  break;  default:  break; } return false; }}

用法

<com.lvfq.myworkingtest.dynamic.view.MultiImageView android:id="@+id/multi_image" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="@dimen/dp_10" />MultiImageView multiImageView = findViewById(R.id.multi_image);multiImageView.setList(imgs); // List<String> 类型的图片地址列表multiImage.setOnItemClickListener(new MultiImageView.OnItemClickListener() {   @Override   public void onItemClick(View view, int position) {   // To do something or 查看大图.   }  });

附:如果需要完整朋友圈项目的话,这里推荐一个 GitHub 项目仿微信实现的朋友圈

以上是“Android如何实现朋友圈多图显示功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Android如何实现朋友圈多图显示功能

本文链接: https://www.lsjlt.com/news/220004.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android如何实现朋友圈多图显示功能
    小编给大家分享一下Android如何实现朋友圈多图显示功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下Android实现朋友圈评论回复列表Andro...
    99+
    2023-05-30
    android
  • android怎么实现多图文分享朋友圈功能
    小编给大家分享一下android怎么实现多图文分享朋友圈功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!很多安卓程序员都在寻找如何调用系统分享可以实现朋友圈多图...
    99+
    2023-05-30
    android
  • Android PraiseTextView实现朋友圈点赞功能
    PraiseTextView 说明 我是将朋友圈分成了几个独立模块单独自定义的View,通过回调完成交互,耦合性算是非常低了,主要有以下及部分: 1.评论布局(自定义TextV...
    99+
    2022-06-06
    朋友圈 Android
  • android实现微信朋友圈发布动态功能
    本文实例为大家分享了android仿微信朋友圈发布动态功能的具体代码,供大家参考,具体内容如下 效果图: 本文概述 用到的开源库:仿照微信的图片选择器,Luban压缩图片,g...
    99+
    2022-06-06
    朋友圈 动态 Android
  • Android如何实现仿微信朋友圈全文、收起功能
    小编给大家分享一下Android如何实现仿微信朋友圈全文、收起功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!效果图具体代码(详细解释在代码注释中都有,这里就省...
    99+
    2023-05-30
    android
  • Android实现微信朋友圈发本地视频功能
    一、前言 前一篇文章已经详细介绍了如何使用Xposed框架编写第一个微信插件:摇骰子和猜拳作弊器 本文继续来介绍如何使用Xposed框架编写第二个微信插件,可以将本地小视频发布...
    99+
    2022-06-06
    朋友圈 Android
  • 朋友圈实现图片+文字转发功能(必看篇)
    朋友圈只能转发图片intent.putExtra(Intent.EXTRA_TEXT, "qqqq");//这个属性在朋友圈无法显示intent.putExtra("Kdescription","ppppp");//但是用这个属性,就可以显...
    99+
    2023-05-31
    朋友圈 转发 图片
  • 关于Android实现简单的微信朋友圈分享功能
    1.先下载微信分享的jar包放在lib目录下,并且添加依赖, 清单文件添加 <activity android:name=".wxapi.WXEntryA...
    99+
    2022-06-06
    朋友圈 Android
  • Android中怎么实现微信朋友圈拍照上传功能
    Android中怎么实现微信朋友圈拍照上传功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. PhotoPicker的使用这是一个支持选择多张图片,点击图片放大,图片之间左...
    99+
    2023-05-30
  • Android开发中怎么实现一个朋友圈分享功能
    本篇文章为大家展示了Android开发中怎么实现一个朋友圈分享功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。先下载微信分享的jar包放在lib目录下,并且添加依赖,清单文件添加<activ...
    99+
    2023-05-31
    android roi
  • Android如何实现微信朋友圈图片和视频播放
    这篇文章主要介绍了Android如何实现微信朋友圈图片和视频播放,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Android是什么Android是一种基于Linux内核的自由...
    99+
    2023-06-14
  • 原生javascript实现分享到朋友圈功能 支持ios和android
      现在主流的分享工具也有很多,例如JiaThis、bShare分享,甚至一些大公司的如百度分享,但是他们依旧停留在只是在PC端的分享,对手机端的支持不是太好。   大家都知道...
    99+
    2022-06-06
    朋友圈 IOS JavaScript Android
  • Android 实现微信,微博,微信朋友圈,QQ分享的功能
    Android 实现微信,微博,微信朋友圈,QQ分享的功能 一、去各自所在的开发者平台注册相应的Key值;引入相关jar包、权限等 二、ShareUtil工具类 impor...
    99+
    2022-06-06
    朋友圈 Android
  • Java如何实现微信公众平台朋友圈分享功能
    这篇文章将为大家详细讲解有关Java如何实现微信公众平台朋友圈分享功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。  其实分享的方法在微信官网有较为详细的文档说明,现就其中一些比较绕的步骤进行总结,有问...
    99+
    2023-05-30
    java
  • 微信小程序如何实现通过保存图片分享到朋友圈功能
    这篇文章给大家分享的是有关微信小程序如何实现通过保存图片分享到朋友圈功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。说明首先说明一点,小程序内是不能直接分享到朋友圈的。所以只能...
    99+
    2022-10-19
  • Android如何自定义ViewGroup实现朋友圈九宫格控件
    本篇内容介绍了“Android如何自定义ViewGroup实现朋友圈九宫格控件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录一、简介1、...
    99+
    2023-06-20
  • Android ImageView实现图片裁剪和显示功能
    首先在layout布局中设置按钮和一个ImageView <Button android:id="@+id/selectimagebtn" android:la...
    99+
    2022-06-06
    图片 Android
  • Android如何实现仿微信@好友功能
    这篇文章主要介绍Android如何实现仿微信@好友功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!先上个效果图就是这么个功能1. 分析需求输入@跳转到联系人界面,选中一个或者多个好友返回到当前界面按退格键删除整块内...
    99+
    2023-05-30
    android
  • Android中ImageView实现选择本地图片并显示功能
    运行结果: 模拟器图库就三张 没办法~画质挺感人~ 一个隐式意图 布局文件: <RelativeLayout xmlns:android="http://schema...
    99+
    2022-06-06
    选择 图片 地图 Android
  • php如何实现图片查询并显示功能
    本篇内容介绍了“php如何实现图片查询并显示功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.建立数据库和数据表首先,我们需要在MySQ...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作