有用的框架

 选择图片和拍照

 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<Bitmap>(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<Bitmap>(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'
 
    <com.scwang.smartrefresh.layout.SmartRefreshLayout
        android:id="@+id/comm_refreshLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/white"
        app:srlAccentColor="@android:color/white"
        app:srlEnableFooterFollowWhenLoadFinished="true"
        app:srlEnableHeaderTranslationContent="true"
        app:srlEnableLoadMore="true"
        app:srlEnableScrollContentWhenLoaded="false"
        app:srlPrimaryColor="@color/colorPrimary">
 
        <com.scwang.smartrefresh.header.BezierCircleHeader
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
 
        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:overScrollMode="never" />
 
        <com.scwang.smartrefresh.layout.footer.ClassicsFooter
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:srlClassicsSpinnerStyle="Translate" />
    </com.scwang.smartrefresh.layout.SmartRefreshLayout>
var comm_refreshLayout = view.findViewById<SmartRefreshLayout>(R.id.comm_refreshLayout)
 
        comm_refreshLayout.setOnRefreshListener { refreshLayout ->
            refreshLayout.layout.postDelayed({
                var data2 = ArrayList<String>()
                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<String>()
                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'

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Enentuate是一个用于构建事件驱动架构的开源框架。它提供了一种简单而强大的方式来处理和管理事件,以及在分布式系统中实现事件驱动的通信和协作。 Enentuate框架的核心概念是事件和事件处理器。事件是系统中发生的某个动作或状态的表示,可以是用户操作、系统事件或其他类型的事件。事件处理器是用于处理特定类型事件的组件,它可以订阅感兴趣的事件,并在事件发生时执行相应的逻辑。 Enentuate框架提供了以下主要功能和特性: 1. 事件发布和订阅:Enentuate框架允许组件发布事件并订阅感兴趣的事件。当事件发生时,订阅者将收到通知并执行相应的处理逻辑。 2. 事件过滤和路由:Enentuate框架支持根据事件的属性进行过滤和路由。这使得可以根据事件的特定属性将其发送到特定的处理器或者过滤掉不感兴趣的事件。 3. 分布式事件处理:Enentuate框架支持在分布式系统中进行事件处理。它提供了一种可靠的机制来确保事件在不同节点之间的传递和处理。 4. 事件持久化和回放:Enentuate框架支持将事件持久化到存储系统中,并可以在需要时进行回放。这对于实现事件溯源和系统状态恢复非常有用。 5. 异步和并发处理:Enentuate框架支持异步和并发处理事件,以提高系统的性能和吞吐量。 6. 可扩展性和灵活性:Enentuate框架设计灵活,可以根据具体需求进行扩展和定制。它提供了丰富的扩展点和插件机制,使开发人员可以根据自己的需求进行定制开发。 总结起来,Enentuate框架是一个强大的事件驱动架构框架,可以帮助开发人员构建高效、可扩展和可靠的分布式系统。它提供了丰富的功能和特性,使得事件驱动的开发变得简单而灵活。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值