Code Monkey home page Code Monkey logo

wechatphoto's Introduction

高仿微信朋友圈,点击查看大图,放大 缩小,可自定义

前言

之前写过一个 高仿微信查看大图 放大缩小 ,开源以后,有小伙伴提出疑问,想要加入视屏的功能,反思了一下,自己当初写这个轮子时候,为什么没有考虑到这个问题,后来经过修改,吧兼容视频放入轮子中

举一反三

  • 除了保留当初设计的图片功能,还需要保留拓展,给以后的其他功能加入
  • 能够兼容各种模式在一起
  • 开发者只需要图片功能,不需要视屏,那么就不需要视屏的轮子,
  • 可以自行拓展想要的布局,和可修改的拓展性

下载

这里将每个部分模块化,可以单独依赖,减少体积

	allprojects {
		repositories {
			...
			maven { url 'https://www.jitpack.io' }
		}
	}

必须添加的模块,也是基础模块

	dependencies {
	         implementation 'com.github.JiangHaiYang01.WeChatPhoto:Larger:0.0.5'
	}

最新版本

提供默认的图片加载器

 implementation 'com.github.JiangHaiYang01.WeChatPhoto:LargerGlide:0.0.5'

提供默认的视屏加载器

 implementation 'com.github.JiangHaiYang01.WeChatPhoto:LargerLoadVideo:0.0.5'

使用介绍

加载列表类型的图片

自定义数据类型,需要继承 LargerBean 并且设置这个类型的是想要改成哪种模式,当前支持的模式 图片 和 视屏模式

@Parcelize
class ImageBean : LargerBean() {
    override fun getType(): LargerDataEnum {
        return LargerDataEnum.IMAGE
    }

}

需要导入 图片加载器

在需要的地方启动 下面是最基础的用法, 就能实现之前版本的需求

Larger.create()
    .withImageMulti()//这里展示的是列表类型的
    .setImageLoad(GlideImageLoader(context))   //图片加载器
    .setIndex(position)//下标
    .setDuration(3000)//动画持续时间
    .setRecyclerView(recyclerView)//recyclerview
    .setData(data) //添加默认的数据源
    .start(context)

加载视屏

和图片一样需要自定义数据类型

@Parcelize
class VideoBean : LargerBean() {
    override fun getType(): LargerDataEnum {
        return LargerDataEnum.Video
    }

}

导入图片加载器和视屏加载器

Larger.create()
    .withVideoMulti()//这里展示的是列表类型的
    .setImageLoad(GlideImageLoader(context))   //图片加载器
    .setVideoLoad(LargerVideoLoad(context))//视屏加载器
    .setIndex(position)//下标
    .setRecyclerView(recyclerView)//recyclerview
    .setData(data) //添加默认的数据源
    .start(context)//跳转

更多属性


    //是否直接向上就能够拖动,微信直接向上不可以拖动,这里默认false
    var upCanMove: Boolean = DefConfig.def_up_can_move,

    //是否自动加载下一页,默认不自动加载下一页
    var loadNextFragment :Boolean = DefConfig.def_loadNextFragment,

    //是否打印日志
    var debug: Boolean = DefConfig.def_debug,

    //单个或者多个图片
    var images: List<View>? = null,

    //列表
    var recyclerView: RecyclerView? = null,

    //使用的类型
    var largerType: LargerEnum = LargerEnum.LISTS,

    //持续时间
    var duration: Long = DefConfig.def_duration,

    //是否自动加载大图
    var automatic: Boolean = DefConfig.def_automatic,

    //最大缩放比例 (2 - f)
    var maxScale: Float = DefConfig.def_max_scale,

    //双击中间的大小 需要小于等于 max
    var mediumScale: Float = DefConfig.def_medium_scale,

    //最小缩放比例 (0.1f-0.7f)
    var minScale: Float = DefConfig.def_min_scale,

    //数据集合
    var data: List<OnLargerType>? = null,

    //当前的下标
    var position: Int = 0,

    //列表的布局
    var layoutId: Int? = null,

    //大图的ImageViewID
    var fullViewId: Int? = null,

    //获取加载框的id
    var progressId: Int? = null,

    //默认的背景颜色
    var backgroundColor: Int = DefConfig.def_back_color,

    //自定义
    var customImageLoadListener: OnCustomImageLoadListener? = null,

    //图片加载器
    var imageLoad: OnImageLoadListener? = null,

    //加载y样式
    var progressType: ImageProgressLoader.ProgressType = DefConfig.def_progress_type,

    //是否使用加载框
    var progressLoaderUse: Boolean = DefConfig.def_progress_use,

    //设置滑动方向
    var orientation: Orientation = DefConfig.orientation,

    //视屏加载器
    var videoLoad: OnVideoLoadListener? = null

最后

整个架构用fragment 的方式去处理,方便后续的拓展,视屏部分使用的是 JiaoZiVideoPlayer 作为播放器,eumm 可以替换自己喜欢的播放器去处理,

github

Github 博客说明

wechatphoto's People

Contributors

jianghaiyang01 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

wechatphoto's Issues

使用问题

Java中调用!! Java中调用!! Java中调用!!
1.调用 Larger.create().XXX.start(context) 进入大图浏览页之后,顶部状态栏没有适配.
2.下载App进行体验时,频繁触发 Leak
3.调用 Larger.create().XXX.start(context) 进入大图浏览页之后,拖拽无反应

playImage_oneImg = (ImageView) findViewById(R.id.playImage_oneImg);

private List list;
private List imgList;
imgList = new ArrayList<>();
imgList.add(playImage_oneImg);

list = new ArrayList<>();
Bean bean = new Bean();
bean.setFullUrl(beanUrl);
list.add(bean);

@OverRide
public void onClick(View v) {
switch (v.getId()) {
default:
break;
case R.id.playImage_oneImg:

            Larger.INSTANCE.create()
                    .withSingle()//这里展示的单个view
                    .setImageLoad(new GlideImageLoader(PlayImageActivity.this))   //图片加载器
                    .setImagesWithSingle(imgList)//设置imageView
                    .setData(list) //添加默认的数据源
                    .start(PlayImageActivity.this);

// Larger.INSTANCE.create()
// .withSingle()//这里展示的是列表类型的
// .setImageLoad(new GlideImageLoader(PlayImageActivity.this)) //图片加载器
// .setCustomListener(R.layout.image_show_big,R.id.big_img,点击自定义的按钮)//自定义布局
// .setData(list) //添加默认的数据源
// .start(PlayImageActivity.this);//跳转

            break;
    }
}

@SuppressLint("ParcelCreator")
private class Bean extends LargerBean{

    @NotNull
    @Override
    public LargerDataEnum getType() {
        return LargerDataEnum.IMAGE;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {

    }
}

空指针,无法使用

希望显示图片的能扩展出来,glide不同版本的冲突,谢谢大佬。
以下是空指针日志:
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object kotlin.Lazy.getValue()' on a null object reference at com.starot.larger.view.progress.CircleProgressView.getMTextPaint(Unknown Source:2) at com.starot.larger.view.progress.CircleProgressView.initPaint(CircleProgressView.kt:343) at com.starot.larger.view.progress.CircleProgressView.invalidate(CircleProgressView.kt:549) at android.widget.ProgressBar.setVisualProgress(ProgressBar.java:1650) at android.widget.ProgressBar.doRefreshProgress(ProgressBar.java:1605) at android.widget.ProgressBar.refreshProgress(ProgressBar.java:1670) at android.widget.ProgressBar.setProgressInternal(ProgressBar.java:1742) at android.widget.ProgressBar.setProgress(ProgressBar.java:1706) at android.widget.ProgressBar.<init>(ProgressBar.java:336) at android.widget.ProgressBar.<init>(ProgressBar.java:275) at com.starot.larger.view.progress.CircleProgressView.<init>(CircleProgressView.kt:25) at com.starot.larger.view.progress.CircleProgressView.<init>(CircleProgressView.kt:24) at com.starot.larger.view.progress.CircleProgressView.<init>(Unknown Source:6) ... 80 more

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.