有用的框架

选择图片和拍照

implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.5.8'

可能需要这个
有用的框架
文章图片

compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }

import android.content.Context; import android.graphics.Bitmap; import android.graphics.PointF; import android.graphics.drawable.Drawable; import android.net.Uri; import android.view.View; import android.widget.ImageView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.graphics.drawable.RoundedBitmapDrawable; import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory; import com.bumptech.glide.Glide; import com.bumptech.glide.Priority; import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.target.BitmapImageViewTarget; import com.bumptech.glide.request.target.ImageViewTarget; import com.luck.picture.lib.engine.ImageEngine; import com.luck.picture.lib.listener.OnImageCompleteCallback; import com.luck.picture.lib.tools.MediaUtils; import com.luck.picture.lib.widget.longimage.ImageSource; import com.luck.picture.lib.widget.longimage.ImageViewState; import com.luck.picture.lib.widget.longimage.SubsamplingScaleImageView; import com.zcf.pangdundun.R; public class GlideEngine implements ImageEngine {/** * 加载图片 * * @param context * @param url * @param imageView */ @Override public void loadImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) { Glide.with(context) .load(url) .into(imageView); }/** * 加载网络图片适配长图方案 * # 注意:此方法只有加载网络图片才会回调 * * @param context * @param url * @param imageView * @param longImageView * @param callback网络图片加载回调监听 {link after version 2.5.1 Please use the #OnImageCompleteCallback#} */ @Override public void loadImage(@NonNull Context context, @NonNull String url, @NonNull final ImageView imageView, final SubsamplingScaleImageView longImageView, final OnImageCompleteCallback callback) { Glide.with(context) .asBitmap() .load(url) .into(new ImageViewTarget(imageView) { @Override public void onLoadStarted(@Nullable Drawable placeholder) { super.onLoadStarted(placeholder); if (callback != null) { callback.onShowLoading(); } }@Override public void onLoadFailed(@Nullable Drawable errorDrawable) { super.onLoadFailed(errorDrawable); if (callback != null) { callback.onHideLoading(); } }@Override protected void setResource(@Nullable Bitmap resource) { if (callback != null) { callback.onHideLoading(); } if (resource != null) { boolean eqLongImage = MediaUtils.isLongImg(resource.getWidth(), resource.getHeight()); longImageView.setVisibility(eqLongImage ? View.VISIBLE : View.GONE); imageView.setVisibility(eqLongImage ? View.GONE : View.VISIBLE); if (eqLongImage) { // 加载长图 longImageView.setQuickScaleEnabled(true); longImageView.setZoomEnabled(true); longImageView.setPanEnabled(true); longImageView.setDoubleTapZoomDuration(100); longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP); longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER); longImageView.setImage(ImageSource.bitmap(resource), new ImageViewState(0, new PointF(0, 0), 0)); } else { // 普通图片 imageView.setImageBitmap(resource); } } } }); }/** * 加载网络图片适配长图方案 * # 注意:此方法只有加载网络图片才会回调 * * @param context * @param url * @param imageView * @param longImageView * @ 已废弃 */ @Override public void loadImage(@NonNull Context context, @NonNull String url, @NonNull final ImageView imageView, final SubsamplingScaleImageView longImageView) { Glide.with(context) .asBitmap() .load(url) .into(new ImageViewTarget(imageView) { @Override protected void setResource(@Nullable Bitmap resource) { if (resource != null) { boolean eqLongImage = MediaUtils.isLongImg(resource.getWidth(), resource.getHeight()); longImageView.setVisibility(eqLongImage ? View.VISIBLE : View.GONE); imageView.setVisibility(eqLongImage ? View.GONE : View.VISIBLE); if (eqLongImage) { // 加载长图 longImageView.setQuickScaleEnabled(true); longImageView.setZoomEnabled(true); longImageView.setPanEnabled(true); longImageView.setDoubleTapZoomDuration(100); longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP); longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER); longImageView.setImage(ImageSource.bitmap(resource), new ImageViewState(0, new PointF(0, 0), 0)); } else { // 普通图片 imageView.setImageBitmap(resource); } } } }); }/** * 加载相册目录 * * @param context上下文 * @param url图片路径 * @param imageView 承载图片ImageView */ @Override public void loadFolderImage(@NonNull final Context context, @NonNull String url, @NonNull final ImageView imageView) { Glide.with(context) .asBitmap() .load(url) .override(180, 180) .centerCrop() .sizeMultiplier(0.5f) .apply(new RequestOptions().placeholder(R.drawable.picture_image_placeholder)) .into(new BitmapImageViewTarget(imageView) { @Override protected void setResource(Bitmap resource) { RoundedBitmapDrawable circularBitmapDrawable = RoundedBitmapDrawableFactory. create(context.getResources(), resource); circularBitmapDrawable.setCornerRadius(8); imageView.setImageDrawable(circularBitmapDrawable); } }); }/** * 加载gif * * @param context上下文 * @param url图片路径 * @param imageView 承载图片ImageView */ @Override public void loadAsGifImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) { Glide.with(context) .asGif() .load(url) .into(imageView); }/** * 加载图片列表图片 * * @param context上下文 * @param url图片路径 * @param imageView 承载图片ImageView */ @Override public void loadGridImage(@NonNull Context context, @NonNull String url, @NonNull ImageView imageView) { Glide.with(context) .load(url) .override(200, 200) .centerCrop() .apply(new RequestOptions().placeholder(R.drawable.picture_image_placeholder)) .into(imageView); }private GlideEngine() { }private static GlideEngine instance; public static GlideEngine createGlideEngine() { if (null == instance) { synchronized (GlideEngine.class) { if (null == instance) { instance = new GlideEngine(); } } } return instance; } }


显示图片
implementation 'com.github.bumptech.glide:glide:4.11.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'

【有用的框架】 权限申请
implementation 'com.afollestad.assent:core:3.0.0-RC4'

刷新框架
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-23' implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-23'


var comm_refreshLayout = view.findViewById(R.id.comm_refreshLayout) comm_refreshLayout.setOnRefreshListener { refreshLayout -> refreshLayout.layout.postDelayed({ var data2 = ArrayList() for (i in 1..10) { data2.add("LV201903250001" + i); } adapter!!.reloadData(data2) refreshLayout.finishRefresh() refreshLayout.resetNoMoreData()//setNoMoreData(false); }, 2000) } comm_refreshLayout.setOnLoadMoreListener(OnLoadMoreListener { refreshlayout -> if (adapter!!.itemCount > 30) { Toast.makeText(activity, "数据全部加载完毕", Toast.LENGTH_SHORT).show(); refreshlayout.finishLoadMoreWithNoMoreData(); //将不会再次触发加载更多事件 } else { var data2 = ArrayList() for (i in 1..10) { data2.add("LV201903250001" + (adapter!!.itemCount + i)); } adapter!!.reloadData(data2, true) refreshlayout.finishLoadMore(); } })

json解析
implementation 'com.google.code.gson:gson:2.8.6'

城市选择器,支持两级或三级
implementation 'liji.library.dev:citypickerview:5.2.2'


    推荐阅读