Fresco 使用databinding @BindingAdapter显示图片
来源:互联网 发布:淘宝做什么生意好赚钱 编辑:程序博客网 时间:2024/05/17 23:57
import android.content.res.Resources;import android.databinding.BindingAdapter;import android.graphics.PointF;import android.graphics.drawable.Drawable;import android.net.Uri;import android.text.TextUtils;import android.util.TypedValue;import com.facebook.drawee.drawable.ScalingUtils;import com.facebook.drawee.generic.RoundingParams;import com.facebook.drawee.view.SimpleDraweeView;import java.io.File;/** * Created by wanghailong on 2016/9/27/0027. */public class FrescoUtil { public static RoundingParams circleParams = null; public static RoundingParams roundingParams = null; public static SimpleDraweeView imageView = null; public static String getHttpUrl(String imageUrl) { return imageUrl; } /** * Fresco 返回圆形图片的配置参数 * 使用方法 SimpleDraweeView.getHierarchy().setRoundingParams(FrescoUtil.getRoundParams) * * @return */ public static RoundingParams getCircleParams() { if (null == circleParams) { synchronized (FrescoUtil.class) { if (null == circleParams) { circleParams = new RoundingParams(); circleParams.setRoundAsCircle(true); } } } return circleParams; } public static RoundingParams getRoundingParams(int round) { roundingParams = new RoundingParams(); roundingParams.setCornersRadius(round); return roundingParams; } /** * Fresco加载圆形图片 * * @param imageView * @param imageUrl // * @param defaultImageID */ public static void loadCircleImage(SimpleDraweeView imageView, String imageUrl, int defaultDrawableId) { imageUrl = getHttpUrl(imageUrl); if (!TextUtils.isEmpty(imageUrl)) { imageView.getHierarchy().setRoundingParams(getCircleParams()); imageView.getHierarchy().setActualImageScaleType(ScalingUtils.ScaleType.FOCUS_CROP); PointF point = new PointF(); point.set(0.5f, 0.0f); imageView.getHierarchy().setActualImageFocusPoint(point); imageView.setImageURI(Uri.parse(imageUrl)); } else { loadResourceCircleImage(imageView, defaultDrawableId, 0); } } /** * Fresco加载圆形图片 * * @param imageView * @param imageUrl * @param defaultImage */ @BindingAdapter({"circleUrl", "defaultDrawable"}) public static void loadCircleImage(SimpleDraweeView imageView, String imageUrl, Drawable defaultImage) { imageUrl = getHttpUrl(imageUrl); if (!TextUtils.isEmpty(imageUrl)) { imageView.getHierarchy().setRoundingParams(getCircleParams()); imageView.getHierarchy().setActualImageScaleType(ScalingUtils.ScaleType.FOCUS_CROP); PointF point = new PointF(); point.set(0.5f, 0.0f); imageView.getHierarchy().setActualImageFocusPoint(point); imageView.setImageURI(Uri.parse(imageUrl)); } else {// loadResourceCircleImage(imageView, defaultImageID, 0); imageView.setImageDrawable(defaultImage); } } /** * 加载网络图片圆角 * * @param imageView * @param imageUrl * @param round * @param defaultImage */ @BindingAdapter({"roundUrl", "round", "defaultDrawable"}) public static void loadRoundImage(SimpleDraweeView imageView, String imageUrl, int round, Drawable defaultImage) { imageUrl = getHttpUrl(imageUrl); int pix = dip2px(round); if (!TextUtils.isEmpty(imageUrl)) { imageView.getHierarchy().setRoundingParams(getRoundingParams(pix)); imageView.setImageURI(Uri.parse(imageUrl)); } else { imageView.setImageDrawable(defaultImage); } } /** * 加载网络图片圆角 * * @param imageView * @param imageUrl * @param round * @param imageId */ public static void loadRoundImage(SimpleDraweeView imageView, String imageUrl, int round, int imageId) { imageUrl = getHttpUrl(imageUrl); int pix = dip2px(round); if (!TextUtils.isEmpty(imageUrl)) { imageView.getHierarchy().setRoundingParams(getRoundingParams(pix)); imageView.setImageURI(Uri.parse(imageUrl)); } else { imageView.setBackgroundResource(imageId); } } /** * 加载网络图片,图片的顶部为圆角 * * @param imageView * @param imageUrl * @param round * @param defaultImageID */ public static void loadTopRoundImage(SimpleDraweeView imageView, String imageUrl, int round, int defaultImageID) { imageUrl = getHttpUrl(imageUrl); int pix = dip2px(round); if (!TextUtils.isEmpty(imageUrl)) { imageView.getHierarchy().setRoundingParams(getRoundingParams(pix).setCornersRadii(pix, pix, 0, 0)); imageView.setImageURI(Uri.parse(imageUrl)); } else { imageView.setBackgroundResource(defaultImageID); } } /** * 加载网络图片,图片的顶部为圆角 * * @param imageView * @param imageUrl * @param round * @param defaultDrawable */ @BindingAdapter({"topRoundUrl", "round", "defaultDrawable"}) public static void loadTopRoundImage(SimpleDraweeView imageView, String imageUrl, int round, Drawable defaultDrawable) { imageUrl = getHttpUrl(imageUrl); int pix = dip2px(round); if (!TextUtils.isEmpty(imageUrl)) { imageView.getHierarchy().setRoundingParams(getRoundingParams(pix).setCornersRadii(pix, pix, 0, 0)); imageView.setImageURI(Uri.parse(imageUrl)); } else { imageView.setImageDrawable(defaultDrawable); } } /** * 加载矩形图片 * * @param imageView * @param imageUrl * @param defaultImageID */ public static void loadImage(SimpleDraweeView imageView, String imageUrl, int defaultImageID) { imageUrl = getHttpUrl(imageUrl); if (!TextUtils.isEmpty(imageUrl)) { imageView.setImageURI(Uri.parse(imageUrl)); } else { if (0 == defaultImageID) { } else { imageView.setImageResource(defaultImageID); } } } @BindingAdapter({"url", "defaultDrawable"}) public static void loadImage(SimpleDraweeView imageView, String imageUrl, Drawable defaultDrawable) { imageUrl = getHttpUrl(imageUrl); if (!TextUtils.isEmpty(imageUrl)) { imageView.setImageURI(Uri.parse(imageUrl)); } else { if (null == defaultDrawable) { } else { imageView.setImageDrawable(defaultDrawable); } } } /** * fresco 加载本地图片 * 已测试 */ /** * 加载资源图片,顶部为圆角 * * @param imageView * @param round */ @BindingAdapter(value = {"topRoundDrawable", "round", "defaultDrawable"}, requireAll = false) public static void loadTopRoundimage(SimpleDraweeView imageView, Drawable topRoundDrawable, int round, Drawable defaultDrawable) { int pix = dip2px(round); if (null != topRoundDrawable) { imageView.getHierarchy().setRoundingParams(getRoundingParams(pix).setCornersRadii(pix, pix, 0, 0));// imageView.setImageURI(new Uri.Builder().scheme("res").path(String.valueOf(topRoundDrawable)).build()); imageView.setImageDrawable(topRoundDrawable); } else if (null != defaultDrawable) { imageView.setImageDrawable(defaultDrawable); } } /** * 加载资源文件 * * @param imageView * @param resourceDrawable * @param defaultImageResId */ public static void loadResourceDrawable(SimpleDraweeView imageView, int resourceDrawable, int defaultImageResId) { if (0 != resourceDrawable) { imageView.setImageURI(new Uri.Builder().scheme("res").path(String.valueOf(resourceDrawable)).build()); } else if (0 != defaultImageResId) { imageView.setBackgroundResource(defaultImageResId); } } @BindingAdapter({"resourceDrawable", "defaultDrawable"}) public static void loadResourceDrawable(SimpleDraweeView imageView, Drawable resourceDrawable, Drawable defaultDrawable) { if (null != resourceDrawable) {// imageView.setImageURI(new Uri.Builder().scheme("res").path(String.valueOf(resourceDrawable)).build()); imageView.setImageDrawable(resourceDrawable); } else if (null != defaultDrawable) { imageView.setImageDrawable(defaultDrawable); } } /** * fresco加载本地图片处理为圆形 * * @param imageView * @param targetImageResId * @param defaultImageResId */ public static void loadResourceCircleImage(SimpleDraweeView imageView, int targetImageResId, int defaultImageResId) { if (0 != targetImageResId) { imageView.getHierarchy().setRoundingParams(getCircleParams()); imageView.setImageURI(new Uri.Builder().scheme("res").path(String.valueOf(targetImageResId)).build()); } else { if (defaultImageResId != 0) { loadResourceCircleImage(imageView, defaultImageResId, 0); } } } @BindingAdapter({"circlRresourceDrawable", "defaultDrawable"}) public static void loadCirclRresourceDrawable(SimpleDraweeView imageView, Drawable circlRresourceDrawable, Drawable defaultDrawable) { if (null != circlRresourceDrawable) { imageView.getHierarchy().setRoundingParams(getCircleParams());// imageView.setImageURI(new Uri.Builder().scheme("res").path(String.valueOf(circlRresourceDrawable)).build()); imageView.setImageDrawable(circlRresourceDrawable); } else { if (defaultDrawable != null) { imageView.setImageDrawable(defaultDrawable); } } } /** * fresco加载本地图片需要输入图片的角度 int * * @param imageView * @param targetImageResId * @param defaultImageResId * @param round */ public static void loadLocalRoundImage(SimpleDraweeView imageView, int targetImageResId, int defaultImageResId, int round) { if (0 != targetImageResId) { int pix = dip2px(round); imageView.getHierarchy().setRoundingParams(getRoundingParams(pix)); imageView.setImageURI(new Uri.Builder().scheme("res").path(String.valueOf(targetImageResId)).build()); } else if (0 != defaultImageResId) { imageView.setBackgroundResource(defaultImageResId); } } @BindingAdapter({"roundResourceDrawable", "round", "defaultDrawable"}) public static void loadRoundResourceDrawable(SimpleDraweeView imageView, Drawable roundResourceDrawable, int round, Drawable defaultDrawable) { if (null != roundResourceDrawable) { int pix = dip2px(round); imageView.getHierarchy().setRoundingParams(getRoundingParams(pix)); //imageView.setImageURI(new Uri.Builder().scheme("res").path(String.valueOf(roundResourceDrawable)).build()); imageView.setImageDrawable(roundResourceDrawable); } else if (null != defaultDrawable) { imageView.setImageDrawable(defaultDrawable); } } /** * fresco加载手机设备上的图片 * * @param imageView * @param filePath * @param defaultImageResId */ public static void loadFileImage(SimpleDraweeView imageView, String filePath, int defaultImageResId) { if (!TextUtils.isEmpty(filePath)) { if (new File(filePath).exists()) { Uri uri = Uri.parse("file://" + filePath); imageView.setImageURI(uri); } else { imageView.setBackgroundResource(defaultImageResId); } } else if (0 != defaultImageResId) { imageView.setBackgroundResource(defaultImageResId); } } /** * fresco加载设备上的文件,显示为圆形 * * @param imageView * @param filePath * @param defaultImageResId */ public static void LoadFileCircleImage(SimpleDraweeView imageView, String filePath, int defaultImageResId) { if (!TextUtils.isEmpty(filePath)) { if (new File(filePath).exists()) { imageView.getHierarchy().setRoundingParams(getCircleParams()); Uri uri = Uri.parse("file://" + filePath); imageView.setImageURI(uri); } else { imageView.setBackgroundResource(defaultImageResId); } } else if (0 != defaultImageResId) { imageView.setBackgroundResource(defaultImageResId); } } /** * fresco加载设备图片显示为圆形,传入角度 * * @param imageView * @param filePath * @param defaultImageResId * @param round */ public static void LoadFileRoundImage(SimpleDraweeView imageView, String filePath, int defaultImageResId, int round) { if (!TextUtils.isEmpty(filePath)) { if (new File(filePath).exists()) { imageView.getHierarchy().setRoundingParams(getRoundingParams(round)); Uri uri = Uri.parse("file://" + filePath); imageView.setImageURI(uri); } else { imageView.setBackgroundResource(defaultImageResId); } } else if (0 != defaultImageResId) { imageView.setBackgroundResource(defaultImageResId); } } public static int dip2px(int dip) { Resources r = Resources.getSystem(); return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, r.getDisplayMetrics()); }}
在xml文件中的用法
<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <import type="debug.been.ImageBeen" /> <import type="java.util.List" /> <variable name="image" type="debug.been.ImageBeen" /> <variable name="list" type="java.util.List<debug.been.ImageBeen>" /> </data> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/black" android:gravity="center" android:orientation="vertical"> <base.imageloader.view.MView android:id="@+id/image5" android:layout_width="50dp" android:layout_height="50dp" app:circleUrl="http://noavatar.csdn.net/C/9/2/1_wangbofei.jpg" app:defaultDrawable="@drawable/open_qilu" /> <base.imageloader.view.MView android:layout_width="50dp" android:layout_height="50dp" app:defaultDrawable="@drawable/open_qilu" app:round="10" app:roundUrl="http://noavatar.csdn.net/C/9/2/1_wangbofei.jpg" /> <base.imageloader.view.MView android:layout_width="50dp" android:layout_height="50dp" app:defaultDrawable="@drawable/open_qilu" app:round="10" app:topRoundUrl="http://noavatar.csdn.net/C/9/2/1_wangbofei.jpg" /> <base.imageloader.view.MView android:layout_width="50dp" android:layout_height="50dp" app:defaultDrawable="@drawable/open_qilu" app:url="http://noavatar.csdn.net/C/9/2/1_wangbofei.jpg" /> <base.imageloader.view.MView android:layout_width="50dp" android:layout_height="50dp" app:defaultDrawable="@{@drawable/open_qilu}" app:url="@{list[0].url}" /> <base.imageloader.view.MView android:layout_width="50dp" android:layout_height="50dp" app:circleUrl="@{list[0].url}" app:defaultDrawable="@{@drawable/open_qilu}" /> <base.imageloader.view.MView android:layout_width="50dp" android:layout_height="50dp" app:circleUrl="@{list[1].url}" app:defaultDrawable="@{@drawable/open_qilu}" /> <base.imageloader.view.MView android:layout_width="50dp" android:layout_height="50dp" app:defaultDrawable="@{@drawable/ic_launcher}" app:resourceDrawable="@{@drawable/open_qilu}" /> <base.imageloader.view.MView android:layout_width="50dp" android:layout_height="50dp" app:circlRresourceDrawable="@drawable/open_qilu" app:defaultDrawable="@drawable/ic_launcher" /> <base.imageloader.view.MView android:layout_width="50dp" android:layout_height="50dp" app:defaultDrawable="@drawable/ic_launcher" app:round="10" app:topRoundDrawable="@drawable/open_qilu" /> <base.imageloader.view.MView android:layout_width="50dp" android:layout_height="50dp" app:defaultDrawable="@drawable/open_qilu" app:round="10" app:roundResourceDrawable="@drawable/open_qilu" /> <base.imageloader.view.MView android:id="@+id/image6" android:layout_width="50dp" android:layout_height="50dp" /> </LinearLayout> </ScrollView></layout>
MView自定义控件
import android.content.Context;import android.content.res.Resources;import android.content.res.TypedArray;import android.graphics.PointF;import android.net.Uri;import android.support.annotation.Nullable;import android.text.TextUtils;import android.util.AttributeSet;import android.util.TypedValue;import com.facebook.drawee.drawable.ScalingUtils;import com.facebook.drawee.generic.GenericDraweeHierarchy;import com.facebook.drawee.generic.RoundingParams;import com.facebook.drawee.view.SimpleDraweeView;/** * Created by Administrator on 2017/3/23/0023. */public class MView extends SimpleDraweeView { private static RoundingParams circleParams = null; private static RoundingParams roundingParams = null; private String url = ""; private String topRoundUrl = ""; private String roundUrl = ""; private String circleUrl = ""; private int round = 0; private int defaultDrawable = 0; private int topRoundDrawable = 0; private int resourceDrawable = 0; private int circlRresourceDrawable = 0; private int roundResourceDrawable = 0; public MView(Context context, GenericDraweeHierarchy hierarchy) { super(context, hierarchy); init(context, null); } public MView(Context context) { super(context); init(context, null); } public MView(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs); } public MView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context, attrs); } public MView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context, attrs); } /** * pvwx * * @param context * @param attrs */ private void init(Context context, @Nullable AttributeSet attrs) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MView); circleUrl = a.getString(R.styleable.MView_circleUrl); roundUrl = a.getString(R.styleable.MView_roundUrl); url = a.getString(R.styleable.MView_url); topRoundUrl = a.getString(R.styleable.MView_topRoundUrl); round = (int) a.getInt(R.styleable.MView_round, round); defaultDrawable = (int) a.getResourceId(R.styleable.MView_defaultDrawable, defaultDrawable); topRoundDrawable = (int) a.getResourceId(R.styleable.MView_topRoundDrawable, topRoundDrawable); roundResourceDrawable = (int) a.getResourceId(R.styleable.MView_roundResourceDrawable, roundResourceDrawable); circlRresourceDrawable = (int) a.getResourceId(R.styleable.MView_circlRresourceDrawable, circlRresourceDrawable); resourceDrawable = (int) a.getResourceId(R.styleable.MView_roundResourceDrawable, resourceDrawable);a.recycle();if (!TextUtils.isEmpty(url)) { setImage(url, defaultDrawable); } else if (!TextUtils.isEmpty(circleUrl)) { setCircleImage(circleUrl, defaultDrawable); } else if (!TextUtils.isEmpty(roundUrl)) { setRoundImage(roundUrl, round, defaultDrawable); } else if (!TextUtils.isEmpty(topRoundUrl)) { seteTopRoundImage(topRoundUrl, round, defaultDrawable); } else if (0 != topRoundDrawable) { //TODO 调用上圆角方法 setTopRoundDrawable(topRoundDrawable, round, defaultDrawable); } else if (0 != roundResourceDrawable) { //TODO 调用圆角方法 setRoundResourceDrawable(roundResourceDrawable, defaultDrawable, round); } else if (0 != circlRresourceDrawable) { setCirclRresourceDrawable(circlRresourceDrawable, defaultDrawable); //TODO 调用圆形方法 } else if (0 != resourceDrawable) { //TODO 调用加载本地图片方法 setResourceDrawable(resourceDrawable, defaultDrawable); } } /** * 加载圆形图片对应circleImage * * @param * @param imageUrl * @param defaultDrawableId */ public void setCircleImage(String imageUrl, int defaultDrawableId) { if (!TextUtils.isEmpty(imageUrl)) { getHierarchy().setRoundingParams(getCircleParams()); getHierarchy().setActualImageScaleType(ScalingUtils.ScaleType.FOCUS_CROP); PointF point = new PointF(); point.set(0.5f, 0.0f); getHierarchy().setActualImageFocusPoint(point); setImageURI(Uri.parse(imageUrl)); } else { setImageResource(defaultDrawableId); } } public void setRoundImage(String imageUrl, int round, int defaultImage) { int pix = dip2px(round); if (!TextUtils.isEmpty(imageUrl)) { getHierarchy().setRoundingParams(getRoundingParams(pix)); setImageURI(Uri.parse(imageUrl)); } else { setImageResource(defaultImage); } } public void seteTopRoundImage(String imageUrl, int round, int defaultImageID) { int pix = dip2px(round); if (!TextUtils.isEmpty(imageUrl)) { getHierarchy().setRoundingParams(getRoundingParams(pix).setCornersRadii(pix, pix, 0, 0)); setImageURI(Uri.parse(imageUrl)); } else { setImageResource(defaultImageID); } } public void setImage(String imageUrl, int defaultImageID) { if (!TextUtils.isEmpty(imageUrl)) { setImageURI(Uri.parse(imageUrl)); } else { if (0 == defaultImageID) { } else { setImageResource(defaultImageID); } } } public void setRoundResourceDrawable(int roundResourceDrawable, int defaultImageResId, int round) { if (0 != roundResourceDrawable) { int pix = dip2px(round); getHierarchy().setRoundingParams(getRoundingParams(pix)); setImageURI(new Uri.Builder().scheme("res").path(String.valueOf(roundResourceDrawable)).build()); } else if (0 != defaultImageResId) { setImageResource(defaultImageResId); } } /** * 加载资源文件 * * @param targetImageResId * @param defaultImageResId */ public void setResourceDrawable(int targetImageResId, int defaultImageResId) { if (0 != targetImageResId) { setImageURI(new Uri.Builder().scheme("res").path(String.valueOf(targetImageResId)).build()); } else if (0 != defaultImageResId) { setImageResource(defaultImageResId); } } /** * fresco加载本地图片处理为圆形 * * @param circlRresourceDrawable * @param defaultImageResId */ public void setCirclRresourceDrawable(int circlRresourceDrawable, int defaultImageResId) { if (0 != circlRresourceDrawable) { getHierarchy().setRoundingParams(getCircleParams()); setImageURI(new Uri.Builder().scheme("res").path(String.valueOf(circlRresourceDrawable)).build()); } else { if (defaultImageResId != 0) { setCirclRresourceDrawable(defaultImageResId, 0); } } } public void setTopRoundDrawable(int topRoundDrawable, int round, int defaultImageResId) { int pix = dip2px(round); if (0 != topRoundDrawable) { getHierarchy().setRoundingParams(getRoundingParams(pix).setCornersRadii(pix, pix, 0, 0)); setImageURI(new Uri.Builder().scheme("res").path(String.valueOf(topRoundDrawable)).build()); } else if (0 != defaultImageResId) { setImageResource(defaultImageResId); } } /** * Displays an image given by the uri. * * @param uri uri of the image * @undeprecate */// @Override// public void setImageURI(Uri uri) {// setImageURI(uri, null);// } /** * 圆形的配置 * * @return */ public static RoundingParams getCircleParams() { if (null == circleParams) { synchronized (MView.class) { if (null == circleParams) { circleParams = new RoundingParams(); circleParams.setRoundAsCircle(true); } } } return circleParams; } /** * 圆角的配置 * * @param round * @return */ public static RoundingParams getRoundingParams(int round) { roundingParams = new RoundingParams(); roundingParams.setCornersRadius(round); return roundingParams; } public static int dip2px(int dip) { Resources r = Resources.getSystem(); return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, r.getDisplayMetrics()); }}MView attr文件<?xml version="1.0" encoding="utf-8"?><resources> <!-- MView--> <declare-styleable name="MView"> <attr name="url" format="string" /> <attr name="round" format="integer" /> <attr name="defaultDrawable" format="reference" /> <attr name="resourceDrawable" format="reference" /> <attr name="circlRresourceDrawable" format="reference" /> <attr name="roundResourceDrawable" format="reference" /> <attr name="topRoundDrawable" format="reference" /> <attr name="topRoundUrl" format="string" /> <attr name="roundUrl" format="string" /> <attr name="circleUrl" format="string" /> </declare-styleable></resources>
0 0
- Fresco 使用databinding @BindingAdapter显示图片
- android databinding BindingAdapter [xml imageUrl加载图片]
- Fresco初探-使用Fresco显示图片
- 解决:android databinding 使用@BindingAdapter 导致application namespace for attribute {} will be ignored
- 解决:android databinding 使用@BindingAdapter 导致application namespace for attribute {} will be ignored
- Android MVVM 之DataBinding,BindingAdapter及component
- Android官方DataBinding(四):BindingAdapter
- DataBinding难点解析之Observable和BindingAdapter
- 使用Fresco实现简单的显示一张图片
- 使用Fresco的时候怎么也不显示图片
- 使用Fresco加载图片
- 使用Fresco下载图片
- 使用Fresco加载图片
- 使用Fresco加载图片
- 使用Fresco加载图片
- 使用Fresco加载图片
- Fresco图片加载框架使用
- 使用Fresco框架加载图片
- 【bzoj3190】[JLOI2013] 赛车
- ROMAN TO INT
- cmake 出现的错误即解决办法
- Linux系统安全基础知识
- 一起Talk Android吧(第十五回:Java常用类之Arrays)
- Fresco 使用databinding @BindingAdapter显示图片
- Linux中 Access Modify Change三者的解释、区别和联系
- spring boot 用war包部署到tomcat下详细教程(解决缺少web.xml报错的问题)
- 七月在线之机器学习与相关数学初步1
- 04-树7 二叉搜索树的操作集 (30分)
- d3,放射,多层,关系图
- 七大排序算法
- 0004_Median of Two Sorted Arrays
- gcc动态静态库的制作