From 2270c82c340e89b40291efa144dd5dd73710ff51 Mon Sep 17 00:00:00 2001 From: nilupeng <qingingrunt2010@qq.com> Date: Wed, 10 Aug 2022 11:53:27 +0000 Subject: [PATCH] 登录信息,头像上传 --- app/src/main/java/com/runt/open/mvvm/util/GlideEngine.kt | 212 ++++++++++++++++++++++++++++++ app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineViewModel.java | 14 +- app/src/main/java/com/runt/open/mvvm/ui/splash/SplashActivity.java | 9 + app/src/main/java/com/runt/open/mvvm/config/Configuration.java | 1 build.gradle | 2 app/src/main/AndroidManifest.xml | 11 - app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java | 20 -- app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageViewModels.java | 2 app/src/main/java/com/runt/open/mvvm/retrofit/Interceptor/HttpLoggingInterceptor.java | 31 ++-- app/build.gradle | 7 app/src/main/java/com/runt/open/mvvm/ui/login/RegisterLoginActivity.java | 9 app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineFragment.java | 81 +++++------ 12 files changed, 299 insertions(+), 100 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 085af32..b6fdb56 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,6 @@ plugins { id 'com.android.application' + id 'kotlin-android' } android { @@ -32,6 +33,9 @@ compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = '1.8' } buildFeatures { viewBinding true @@ -71,6 +75,5 @@ annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' implementation 'com.facebook.rebound:rebound:0.3.6'//Rebound “弹簧”动画效果的第三方工具包,由FaceBook implementation 'com.github.zhaolei9527:BottomMenu:v1.0.1'//底部菜单弹框 - implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.2.3'//图片选择 - implementation 'com.github.wildma:PictureSelector:1.1.1'//图片选择裁切工具 + implementation 'com.github.LuckSiege.PictureSelector:picture_library:v2.6.0'//图片选择 } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8b509b3..0056ae6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,16 +42,7 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> - <activity android:name=".ui.main.MainActivity" - android:launchMode="singleTask" - tools:ignore="WrongManifestParent" - android:exported="true"> - <intent-filter> - <action android:name="android.intent.action.VIEW" /> - <category android:name="android.intent.category.DEFAULT" /> - <action android:name="com.zfwl.merchant.activities.MainActivity" /> - </intent-filter> - </activity> + <activity android:name=".ui.main.MainActivity" /> <activity android:name=".ui.login.RegisterLoginActivity" /> <activity android:name=".ui.web.WebViewActivity" /> </application> diff --git a/app/src/main/java/com/runt/open/mvvm/config/Configuration.java b/app/src/main/java/com/runt/open/mvvm/config/Configuration.java index e865ba8..4cd44e4 100644 --- a/app/src/main/java/com/runt/open/mvvm/config/Configuration.java +++ b/app/src/main/java/com/runt/open/mvvm/config/Configuration.java @@ -9,6 +9,7 @@ public final static String KEY_CODE= "code"; public static final String KEY_TOKEN = "token"; + public static final String KEY_USERINFO = "userinfo"; public static final String KEY_USERNAME = "username"; public static final String KEY_PHONE = "phone"; public static final String KEY_USERPASS = "userpass"; diff --git a/app/src/main/java/com/runt/open/mvvm/retrofit/Interceptor/HttpLoggingInterceptor.java b/app/src/main/java/com/runt/open/mvvm/retrofit/Interceptor/HttpLoggingInterceptor.java index eb7c890..59cb698 100644 --- a/app/src/main/java/com/runt/open/mvvm/retrofit/Interceptor/HttpLoggingInterceptor.java +++ b/app/src/main/java/com/runt/open/mvvm/retrofit/Interceptor/HttpLoggingInterceptor.java @@ -1,15 +1,18 @@ package com.runt.open.mvvm.retrofit.Interceptor; import android.util.Log; - import com.google.gson.Gson; import com.runt.open.mvvm.MyApplication; import com.runt.open.mvvm.data.PhoneDevice; import com.runt.open.mvvm.retrofit.net.NetWorkCost; import com.runt.open.mvvm.retrofit.net.NetWorkListenear; import com.runt.open.mvvm.retrofit.utils.HttpPrintUtils; +import com.runt.open.mvvm.ui.login.UserBean; import com.runt.open.mvvm.util.DeviceUtil; - +import okhttp3.*; +import okhttp3.internal.http.HttpHeaders; +import okio.Buffer; +import okio.BufferedSource; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -21,18 +24,6 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashMap; - -import okhttp3.FormBody; -import okhttp3.Headers; -import okhttp3.MediaType; -import okhttp3.MultipartBody; -import okhttp3.Request; -import okhttp3.RequestBody; -import okhttp3.Response; -import okhttp3.ResponseBody; -import okhttp3.internal.http.HttpHeaders; -import okio.Buffer; -import okio.BufferedSource; /** * My father is Object, ites purpose of log打印 @@ -65,6 +56,9 @@ .addHeader("device", new Gson().toJson(PhoneDevice.getDevice())) .addHeader("appVersion", DeviceUtil.getAppVersionName(MyApplication.getApplication())) .addHeader("os", DeviceUtil.isHarmonyOS()? "harmony" : "android"); + if(UserBean.getUser() != null){ + requestBuild.addHeader("token",UserBean.getUser().getToken()); + } Request request = requestBuild.build().newBuilder().build(); ArrayList<String> logArrays = new ArrayList<>(); Response response = null; @@ -208,7 +202,14 @@ if (isPlaintext(buffer)) { logArrays.add("---------->RESPONSE BODY<----------"); if (contentLength != 0) { - logArrays.add(new JSONObject(buffer.clone().readString((charset))).toString(4)); + String str = buffer.clone().readString(charset); + if(str.trim().indexOf("{") == 0) { + logArrays.add(new JSONObject(str).toString(4)); + }else if(str.trim().indexOf("[") == 0) { + logArrays.add(new JSONArray(str).toString(4)); + }else{ + logArrays.add(str); + } } logArrays.add("<-- END HTTP (" + buffer.size() + "-byte body)"); diff --git a/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java b/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java index 0922a46..9c7e832 100644 --- a/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java +++ b/app/src/main/java/com/runt/open/mvvm/retrofit/api/CommonApiCenter.java @@ -5,23 +5,11 @@ import com.runt.open.mvvm.data.HttpApiResult; import com.runt.open.mvvm.data.PageResult; import com.runt.open.mvvm.data.Results; - -import java.util.Map; - import io.reactivex.Observable; import okhttp3.MultipartBody; -import okhttp3.ResponseBody; -import retrofit2.Call; -import retrofit2.http.Field; -import retrofit2.http.FieldMap; -import retrofit2.http.FormUrlEncoded; -import retrofit2.http.GET; -import retrofit2.http.Multipart; -import retrofit2.http.POST; -import retrofit2.http.Part; -import retrofit2.http.Query; -import retrofit2.http.QueryMap; -import retrofit2.http.Url; +import retrofit2.http.*; + +import java.util.Map; /** * My father is Object, ites purpose of 常用接口 @@ -74,7 +62,7 @@ @Multipart @POST("updatehead") - Call<ResponseBody> updateHead(@Part MultipartBody.Part file); + Observable<Results.StringApiResult> updateHead(@Part MultipartBody.Part file); /** diff --git a/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageViewModels.java b/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageViewModels.java index dba8b38..8d76586 100644 --- a/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageViewModels.java +++ b/app/src/main/java/com/runt/open/mvvm/ui/loadpage/PageViewModels.java @@ -11,7 +11,7 @@ * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/8/9. */ public class PageViewModels { - public class HomeViewModel extends LoadPageViewModel<Results.Message> { + public static class HomeViewModel extends LoadPageViewModel<Results.Message> { @Override public Observable<HttpApiResult<PageResult<Results.Message>>> request(int page, Object... objects) { return commonApi.getMsgList(page,SIZE); diff --git a/app/src/main/java/com/runt/open/mvvm/ui/login/RegisterLoginActivity.java b/app/src/main/java/com/runt/open/mvvm/ui/login/RegisterLoginActivity.java index eb3eb99..7c100fe 100644 --- a/app/src/main/java/com/runt/open/mvvm/ui/login/RegisterLoginActivity.java +++ b/app/src/main/java/com/runt/open/mvvm/ui/login/RegisterLoginActivity.java @@ -46,13 +46,10 @@ } }); mViewModel.getLoginResult().observe(this, loggedInUser -> { - putBooleanProjectPrefrence(Configuration.IS_LOGIN,true); putStringProjectPrefrence(Configuration.KEY_USERNAME, mBinding.editPhone.getText().toString()); - - UserBean user = new Gson().fromJson(new Gson().toJson(loggedInUser) ,UserBean.class); - UserBean.setUser(user); - putStringProjectPrefrence(Configuration.KEY_TOKEN, user.getToken()); - MyLog.i("registerlogin",user.toString()); + UserBean.setUser(loggedInUser); + putStringProjectPrefrence(Configuration.KEY_USERINFO, new Gson().toJson(loggedInUser)); + MyLog.i("registerlogin",loggedInUser.toString()); showToast(R.string.login_success); setResult(RESULT_CODE_SUCESS); finish(); diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineFragment.java b/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineFragment.java index d06e356..3be5ae5 100644 --- a/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineFragment.java +++ b/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineFragment.java @@ -2,27 +2,32 @@ import android.app.Activity; import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.util.Log; import android.view.View; - import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; -import com.permissionx.guolindev.PermissionX; +import com.luck.picture.lib.PictureSelector; +import com.luck.picture.lib.config.PictureConfig; +import com.luck.picture.lib.config.PictureMimeType; +import com.luck.picture.lib.entity.LocalMedia; import com.runt.open.mvvm.BuildConfig; import com.runt.open.mvvm.R; import com.runt.open.mvvm.base.fragments.BaseFragment; +import com.runt.open.mvvm.data.HttpApiResult; +import com.runt.open.mvvm.data.Results; import com.runt.open.mvvm.databinding.FragmentMineBinding; -import com.runt.open.mvvm.listener.ResPonse; import com.runt.open.mvvm.retrofit.observable.HttpObserver; import com.runt.open.mvvm.ui.login.UserBean; +import com.runt.open.mvvm.util.GlideEngine; import com.runt.open.mvvm.util.MyLog; -import com.wildma.pictureselector.PictureSelector; - -import java.io.File; - import okhttp3.ResponseBody; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; + +import java.io.File; +import java.util.List; /** * My father is Object, ites purpose of @@ -118,27 +123,25 @@ * 打开相册 */ public void openAlthum(){ - PermissionX.init(this) - .permissions(mActivity.CAMERA_PERMISSIONS) - .request((allGranted, grantedList, deniedList) -> { - if(allGranted){ - PictureSelector - .create(this, PictureSelector.SELECT_REQUEST_CODE) - .selectPicture(true, 300, 300, 20, 20); - }else{ - mActivity.showDialog("警告", "软件需要权限才能运行", "申请权限", "取消", new ResPonse() { - @Override - public void doSuccess(Object obj) { - openAlthum(); - } - - @Override - public void doError(Object obj) { - } - }); - } - - }); + PictureSelector.create(this) + .openGallery(PictureMimeType.ofImage()) // 全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio() + .imageEngine(GlideEngine.Companion.getInstance()) // 外部传入图片加载引擎,必传项 + .maxSelectNum(1) // 最大图片选择数量 + .minSelectNum(1) // 最小选择数量 + .imageSpanCount(3) // 每行显示个数 + .isReturnEmpty(true) // 未选择数据时点击按钮是否可以返回 + .isAndroidQTransform(false) // 是否需要处理Android Q 拷贝至应用沙盒的操作,只针对compress(false); && .isEnableCrop(false);有效,默认处理 + .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) // 设置相册Activity方向,不设置默认使用系统 + .isSingleDirectReturn(true) // 单选模式下是否直接返回,PictureConfig.SINGLE模式下有效 + .isPreviewImage(true) // 是否可预览图片 + .isCamera(true) // 是否显示拍照按钮 + .isZoomAnim(false) // 图片列表点击 缩放效果 默认true + .isEnableCrop(true) // 是否裁剪 + .withAspectRatio(1, 1) // 裁剪比例 如16:9 3:2 3:4 1:1 可自定义 + .isCompress(false) // 是否压缩 + .cutOutQuality(100) // 裁剪输出质量 默认100 + .selectionMode(PictureConfig.SINGLE) + .forResult(PictureConfig.CHOOSE_REQUEST);//结果回调onActivityResult code } @@ -147,24 +150,18 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); /*结果回调*/ - if (requestCode == PictureSelector.SELECT_REQUEST_CODE) { + if (requestCode == PictureConfig.CHOOSE_REQUEST) { if (data != null) { - String picturePath = data.getStringExtra(PictureSelector.PICTURE_PATH); - MyLog.i("mineActivity","picturePath:"+picturePath); - final File file = new File(picturePath); - mViewModel.updateHead(file).enqueue(new Callback<ResponseBody>() { + List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data); + final File file = new File(selectList.get(0).getCutPath()); + MyLog.i("mineActivity","picturePath:"+selectList.get(0).getCutPath()+" exists:"+file.exists()); + mViewModel.updateHead(file, new HttpObserver<String>() { @Override - public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { - /*UserBean.getUser().setHead(obj.toString()); - file.delete(); - Glide.with(getContext()).load(BuildConfig.HOST_IP_ADDR+UserBean.getUser().getHead()) .into(mBinding.img); //获取选取的图片*/ - + protected void onSuccess(String data) { + UserBean.getUser().setHead(data); + Glide.with(getContext()).load(BuildConfig.HOST_IP_ADDR+UserBean.getUser().getHead()) .into(mBinding.img); //获取选取的图片 } - @Override - public void onFailure(Call<ResponseBody> call, Throwable t) { - file.delete(); - } }); } }else if(requestCode == REQUEST_CODE_SIGN && resultCode == Activity.RESULT_OK){ diff --git a/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineViewModel.java b/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineViewModel.java index 0dfb04b..8f12bbe 100644 --- a/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineViewModel.java +++ b/app/src/main/java/com/runt/open/mvvm/ui/main/mine/MineViewModel.java @@ -1,17 +1,16 @@ package com.runt.open.mvvm.ui.main.mine; import com.runt.open.mvvm.base.model.BaseViewModel; +import com.runt.open.mvvm.data.Results; import com.runt.open.mvvm.listener.ResPonse; import com.runt.open.mvvm.retrofit.observable.HttpObserver; import com.runt.open.mvvm.ui.login.UserBean; - -import java.io.File; - +import io.reactivex.Observable; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.RequestBody; -import okhttp3.ResponseBody; -import retrofit2.Call; + +import java.io.File; /** * @purpose Created by Runt (qingingrunt2010@qq.com) on 2022/7/27. @@ -29,8 +28,9 @@ } } - public Call<ResponseBody> updateHead(File file){ - return commonApi.updateHead(MultipartBody.Part.createFormData("head",file.getName(), RequestBody.create(MediaType.parse("text/plain"), file))); + public void updateHead(File file, HttpObserver<String> observer){ + Observable<Results.StringApiResult> observable = commonApi.updateHead(MultipartBody.Part.createFormData("head", file.getName(), RequestBody.create(MediaType.parse("text/plain"), file))); + httpObserverOnLoading(observable,observer); } } diff --git a/app/src/main/java/com/runt/open/mvvm/ui/splash/SplashActivity.java b/app/src/main/java/com/runt/open/mvvm/ui/splash/SplashActivity.java index f422ab8..fbdd839 100644 --- a/app/src/main/java/com/runt/open/mvvm/ui/splash/SplashActivity.java +++ b/app/src/main/java/com/runt/open/mvvm/ui/splash/SplashActivity.java @@ -5,10 +5,12 @@ import android.os.Handler; import android.view.View; import android.view.WindowManager; - +import com.google.gson.Gson; import com.runt.open.mvvm.base.activities.BaseActivity; import com.runt.open.mvvm.base.model.ImpViewModel; +import com.runt.open.mvvm.config.Configuration; import com.runt.open.mvvm.databinding.ActivitySplashBinding; +import com.runt.open.mvvm.ui.login.UserBean; import com.runt.open.mvvm.ui.main.MainActivity; @@ -36,6 +38,11 @@ @Override public void loadData() { + String json = getStringProjectPrefrence(Configuration.KEY_USERINFO); + if(!isNull(json)){ + UserBean user = new Gson().fromJson(json ,UserBean.class); + UserBean.setUser(user); + } new Handler().postDelayed(new Runnable() { @Override public void run() { diff --git a/app/src/main/java/com/runt/open/mvvm/util/GlideEngine.kt b/app/src/main/java/com/runt/open/mvvm/util/GlideEngine.kt new file mode 100644 index 0000000..b6265c9 --- /dev/null +++ b/app/src/main/java/com/runt/open/mvvm/util/GlideEngine.kt @@ -0,0 +1,212 @@ +package com.runt.open.mvvm.util + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.PointF +import android.graphics.drawable.Drawable +import android.view.View +import android.widget.ImageView +import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory +import com.bumptech.glide.Glide +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.runt.open.mvvm.R + + +class GlideEngine : ImageEngine { + private constructor() + + companion object { + val instance = GlideEngineInit.init + } + + private object GlideEngineInit { + val init = GlideEngine() + } + + /** + * 加载图片 + * + * @param context + * @param url + * @param imageView + */ + override fun loadImage(context: Context, url: String, 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 fun loadImage( + context: Context, url: String, + imageView: ImageView, + longImageView: SubsamplingScaleImageView, callback: OnImageCompleteCallback? + ) { + Glide.with(context) + .asBitmap() + .load(url) + .into(object : ImageViewTarget<Bitmap?>(imageView) { + override fun onLoadStarted(placeholder: Drawable?) { + super.onLoadStarted(placeholder) + callback?.onShowLoading() + } + + override fun onLoadFailed(errorDrawable: Drawable?) { + super.onLoadFailed(errorDrawable) + callback?.onHideLoading() + } + + override fun setResource(resource: Bitmap?) { + callback?.onHideLoading() + if (resource != null) { + val eqLongImage = MediaUtils.isLongImg( + resource.width, + resource.height + ) + longImageView.visibility = if (eqLongImage) View.VISIBLE else View.GONE + imageView.visibility = if (eqLongImage) View.GONE else View.VISIBLE + if (eqLongImage) { + // 加载长图 + longImageView.isQuickScaleEnabled = true + longImageView.isZoomEnabled = true + longImageView.setDoubleTapZoomDuration(100) + longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP) + longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER) + longImageView.setImage( + ImageSource.bitmap(resource), + ImageViewState(0f, PointF(0f, 0f), 0) + ) + } else { + // 普通图片 + imageView.setImageBitmap(resource) + } + } + } + }) + } + + /** + * 加载网络图片适配长图方案 + * # 注意:此方法只有加载网络图片才会回调 + * + * @param context + * @param url + * @param imageView + * @param longImageView + * @ 已废弃 + */ + override fun loadImage( + context: Context, url: String, + imageView: ImageView, + longImageView: SubsamplingScaleImageView + ) { + Glide.with(context) + .asBitmap() + .load(url) + .into(object : ImageViewTarget<Bitmap?>(imageView) { + override fun setResource(resource: Bitmap?) { + if (resource != null) { + val eqLongImage = MediaUtils.isLongImg( + resource.width, + resource.height + ) + longImageView.visibility = if (eqLongImage) View.VISIBLE else View.GONE + imageView.visibility = if (eqLongImage) View.GONE else View.VISIBLE + if (eqLongImage) { + // 加载长图 + longImageView.isQuickScaleEnabled = true + longImageView.isZoomEnabled = true + longImageView.setDoubleTapZoomDuration(100) + longImageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_CROP) + longImageView.setDoubleTapZoomDpi(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER) + longImageView.setImage( + ImageSource.bitmap(resource), + ImageViewState(0f, PointF(0f, 0f), 0) + ) + } else { + // 普通图片 + imageView.setImageBitmap(resource) + } + } + } + }) + } + + /** + * 加载相册目录 + * + * @param context 上下文 + * @param url 图片路径 + * @param imageView 承载图片ImageView + */ + override fun loadFolderImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .asBitmap() + .load(url) + .override(180, 180) + .centerCrop() + .sizeMultiplier(0.5f) + .apply(RequestOptions().placeholder(R.drawable.picture_image_placeholder)) + .into(object : BitmapImageViewTarget(imageView) { + override fun setResource(resource: Bitmap?) { + val circularBitmapDrawable = + RoundedBitmapDrawableFactory.create(context.resources, resource) + circularBitmapDrawable.cornerRadius = 8f + imageView.setImageDrawable(circularBitmapDrawable) + } + }) + } + + + /** + * 加载gif + * + * @param context 上下文 + * @param url 图片路径 + * @param imageView 承载图片ImageView + */ + override fun loadAsGifImage( + context: Context, url: String, + imageView: ImageView + ) { + Glide.with(context) + .asGif() + .load(url) + .into(imageView) + } + + /** + * 加载图片列表图片 + * + * @param context 上下文 + * @param url 图片路径 + * @param imageView 承载图片ImageView + */ + override fun loadGridImage(context: Context, url: String, imageView: ImageView) { + Glide.with(context) + .load(url) + .override(200, 200) + .centerCrop() + .apply(RequestOptions().placeholder(R.drawable.picture_image_placeholder)) + .into(imageView) + } + + +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 7cbb664..efa40c2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,11 +1,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + ext.kotlin_version = "1.4.31" repositories { google() mavenCentral() } dependencies { classpath "com.android.tools.build:gradle:7.0.3" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files -- Gitblit v1.9.1