日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 类似qq空间微博微信九宫格图片

發布時間:2024/1/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 类似qq空间微博微信九宫格图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

直接給代碼吧:

import android.content.Context; import android.content.res.TypedArray; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import android.util.TypedValue; import java.util.ArrayList; import java.util.List;/*** 描述:* 作者:HCH* 時間:2016/7/10*/ public abstract class NineGridLayout extends ViewGroup {private static final float DEFUALT_SPACING = 3f;private static final int MAX_COUNT = 9;protected Context mContext;private float mSpacing = DEFUALT_SPACING;private int mColumns;private int mRows;private int mTotalWidth;private int mSingleWidth;private boolean mIsShowAll = false;private boolean mIsFirst = true;protected List<String> mUrlList = new ArrayList<>();public NineGridLayout(Context context) {super(context);init(context);}public NineGridLayout(Context context, AttributeSet attrs) {super(context, attrs);TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.NineGridLayout);mSpacing = typedArray.getDimension(R.styleable.NineGridLayout_sapcing, DEFUALT_SPACING);typedArray.recycle();init(context);}private void init(Context context) {mContext = context;if (getListSize(mUrlList) == 0) {setVisibility(GONE);}}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);}@Overrideprotected void onLayout(boolean changed, int left, int top, int right, int bottom) {mTotalWidth = right - left;mSingleWidth = (int) ((mTotalWidth - mSpacing * (3 - 1)) / 3);if (mIsFirst) {notifyDataSetChanged();mIsFirst = false;}}/*** 設置間隔** @param spacing*/public void setSpacing(float spacing) {mSpacing = spacing;}/*** 設置是否顯示所有圖片(超過最大數時)** @param isShowAll*/public void setIsShowAll(boolean isShowAll) {mIsShowAll = isShowAll;}//設置圖片url集合public void setUrlList(List<String> urlList) {if (getListSize(urlList) == 0) {setVisibility(GONE);return;}setVisibility(VISIBLE);mUrlList.clear();mUrlList.addAll(urlList);notifyDataSetChanged();}public void notifyDataSetChanged() {removeAllViews();int size = getListSize(mUrlList);if (size > 0) {setVisibility(VISIBLE);} else {setVisibility(GONE);}/*** 一張圖片的時候自己處理下,下面是我的處理方法,在圖片命名的時候,在最后面加圖片的寬高比WH * 例如:http://taohong10053458.image.myqcloud.com/1475846613.264475WH1.38 * 寬高比1.38 然后再根據寬高比去重新設定圖片的寬高 * */if (size == 1) {String url = mUrlList.get(0);ImageView imageView = createImageView(0, url);//避免在ListView中一張圖未加載成功時,布局高度受其他item影響LayoutParams params = getLayoutParams();String[] str = url.split("H");float weight = 0;if (str != null){int length = str.length;if (length >= 2) {try {weight = Float.valueOf(str[length - 1]);} catch (Exception e) {e.printStackTrace();}}}if (weight != 0 ){int width = 0;int height = 0;if (weight > 1){width = dp2px(mContext, 230);height = dp2px(mContext, 230/weight);params.height = height;setLayoutParams(params);imageView.layout(0, 0, width, height);}else {width = DensityUtil.dp2px(mContext, 180);height = DensityUtil.dp2px(mContext, 180/weight);params.height = height;setLayoutParams(params);imageView.layout(0, 0, width, height);}}else {params.height = mSingleWidth;setLayoutParams(params);imageView.layout(0, 0, mSingleWidth, mSingleWidth);}boolean isShowDefualt = displayOneImage(imageView, url, mTotalWidth);if (isShowDefualt) {layoutImageView(imageView, 0, url, false);} else {addView(imageView);}return;}generateChildrenLayout(size);layoutParams();for (int i = 0; i < size; i++) {String url = mUrlList.get(i);ImageView imageView;if (!mIsShowAll) {if (i < MAX_COUNT - 1) {imageView = createImageView(i, url);layoutImageView(imageView, i, url, false);} else { //第9張時if (size <= MAX_COUNT) {//剛好第9張imageView = createImageView(i, url);layoutImageView(imageView, i, url, false);} else {//超過9張imageView = createImageView(i, url);layoutImageView(imageView, i, url, true);break;}}} else {imageView = createImageView(i, url);layoutImageView(imageView, i, url, false);}}}private void layoutParams() {int singleHeight = mSingleWidth;//根據子view數量確定高度LayoutParams params = getLayoutParams();params.height = (int) (singleHeight * mRows + mSpacing * (mRows - 1));setLayoutParams(params);}private ImageView createImageView(final int i, final String url) {ImageView imageView = new ImageView(mContext);imageView.setBackgroundColor(getResources().getColor(R.color.image_default_bg));imageView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {onClickImage(v, i, url, mUrlList);if (listener != null) listener.onClickImage(v, i, url, mUrlList.get(i));}});return imageView;}/*** @param imageView* @param url* @param showNumFlag 是否在最大值的圖片上顯示還有未顯示的圖片張數*/private void layoutImageView(ImageView imageView, int i, String url, boolean showNumFlag) {final int singleWidth = (int) ((mTotalWidth - mSpacing * (3 - 1)) / 3);int singleHeight = singleWidth;int[] position = findPosition(i);int left = (int) ((singleWidth + mSpacing) * position[1]);int top = (int) ((singleHeight + mSpacing) * position[0]);int right = left + singleWidth;int bottom = top + singleHeight;imageView.layout(left, top, right, bottom);addView(imageView);if (showNumFlag) {//添加超過最大顯示數量的文本int overCount = getListSize(mUrlList) - MAX_COUNT;if (overCount > 0) {float textSize = 30;final TextView textView = new TextView(mContext);textView.setText("+" + String.valueOf(overCount));textView.setTextColor(Color.WHITE);textView.setPadding(0, singleHeight / 2 - getFontHeight(textSize), 0, 0);textView.setTextSize(textSize);textView.setGravity(Gravity.CENTER);textView.setBackgroundColor(Color.BLACK);textView.getBackground().setAlpha(120);textView.layout(left, top, right, bottom);addView(textView);}}displayImage(imageView, url);}//根據第幾個找到它在屏幕上的位置private int[] findPosition(int childNum) {int[] position = new int[2];for (int i = 0; i < mRows; i++) {for (int j = 0; j < mColumns; j++) {if ((i * mColumns + j) == childNum) {position[0] = i;//行position[1] = j;//列break;}}}return position;}/*** 根據圖片個數確定行列數量** @param length*/private void generateChildrenLayout(int length) {if (length <= 3) {mRows = 1;mColumns = length;} else if (length <= 6) {mRows = 2;mColumns = 3;if (length == 4) {mColumns = 2;}} else {mColumns = 3;if (mIsShowAll) {mRows = length / 3;int b = length % 3;if (b > 0) {mRows++;}} else {mRows = 3;}}}protected void setOneImageLayoutParams(RatioImageView imageView, int width, int height) { // imageView.setLayoutParams(new LayoutParams(width, height));imageView.layout(0, 0, width, height);LayoutParams params = getLayoutParams(); // params.width = width;params.height = height;setLayoutParams(params);}private int getListSize(List<String> list) {if (list == null || list.size() == 0) {return 0;}return list.size();}private int getFontHeight(float fontSize) {Paint paint = new Paint();paint.setTextSize(fontSize);Paint.FontMetrics fm = paint.getFontMetrics();return (int) Math.ceil(fm.descent - fm.ascent);}public int dp2px(Context context, float dpVal) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal, context.getResources().getDisplayMetrics());}private OnImageClickListener listener;public void setOnClickImageListener(OnImageClickListener listener){this.listener = listener;}public interface OnImageClickListener{void onClickImage(View view, int position, String url, String urlList);}/*** @param imageView* @param url* @param parentWidth 父控件寬度* @return true 代表按照九宮格默認大小顯示,false 代表按照自定義寬高顯示*/protected abstract boolean displayOneImage(ImageView imageView, String url, int parentWidth);protected abstract void displayImage(ImageView imageView, String url);protected abstract void onClickImage(View view, int position, String url, List<String> urlList); }

加上attr:

<declare-styleable name="NineGridLayout"><attr name="sapcing" format="dimension"/></declare-styleable>

使用方便方便,繼承上面的自定義NineGridLayout,實現最后三個方法,加載圖片,及點擊圖片后的事件處理。

總結

以上是生活随笔為你收集整理的android 类似qq空间微博微信九宫格图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。