国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現朋友圈多圖顯示功能

2019-10-22 18:23:19
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android實現朋友圈多圖顯示的具體代碼,供大家參考,具體內容如下

正文

先看一下效果圖:

Android,朋友圈,多圖顯示

MultiImageView:

 

public class MultiImageView extends LinearLayout { public static int MAX_WIDTH = 0; // 照片的Url列表 private List<String> imagesList; /** * 長度 單位為Pixel * */ 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); } /** * Determines the width of this view * * @param measureSpec A measureSpec packed into an int * @return The width of the view, honoring constraints from measureSpec */ 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

附:如果需要完整朋友圈項目的話,這里推薦一個 Github 項目仿微信實現的朋友圈

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 方山县| 汽车| 徐闻县| 海兴县| 福清市| 阳信县| 玛纳斯县| 镇远县| 兴文县| 淮南市| 尼玛县| 永和县| 台北市| 新民市| 农安县| 牙克石市| 深泽县| 二手房| 开封县| 扎赉特旗| 赞皇县| 汕头市| 太仆寺旗| 济宁市| 吴桥县| 中阳县| 徐水县| 托里县| 开鲁县| 福海县| 蓬安县| 合川市| 云安县| 天等县| 舞钢市| 洛川县| 岢岚县| 孟津县| 铁岭市| 武汉市| 和平县|