在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → 仿抖音流的图片浏览app

仿抖音流的图片浏览app

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:3.82M
  • 下载次数:19
  • 浏览次数:895
  • 发布时间:2019-02-28
  • 实例类别:Android平台开发
  • 发 布 人:lucasxu
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 图片 浏览 app 图片浏览

实例介绍

仿抖音流的图片浏览app,可以不断下滑加载高兴图。预加载屏幕下方的图片。点击可看大图,可保存到本地。

@BindContentView(R.layout.fragment_recycler)
class UnsplashPhotosFragment : BaseFragment(), UnsplashPhotosItemFactory.UnsplashPhotosItemEventListener, OnLoadMoreListener, androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener {
private var adapter: AssemblyRecyclerAdapter? = null
private var pageIndex = 1
private var backgroundImageUri: String? = null
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
recycler_recyclerFragment_content.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(context)
refresh_recyclerFragment.setOnRefreshListener(this)
if (adapter != null) {
recycler_recyclerFragment_content.adapter = adapter
} else {
refresh_recyclerFragment.post { onRefresh() }
}
}
override fun onUserVisibleChanged(isVisibleToUser: Boolean) {
if (isVisibleToUser) {
changeBackground(backgroundImageUri)
}
}
private fun changeBackground(imageUri: String?) {
this.backgroundImageUri = imageUri
backgroundImageUri?.let { EventBus.getDefault().post(ChangeMainPageBgEvent(it)) }
}
private fun loadData(pageIndex: Int) {
this.pageIndex = pageIndex
NetServices.unsplash().listPhotos(pageIndex).enqueue(LoadDataCallback(this, pageIndex))
}
override fun onClickImage(position: Int, image: UnsplashImage, optionsKey: String) {
val activity = activity ?: return
var finalOptionsKey: String? = optionsKey
// 含有这些信息时,说明这张图片不仅仅是缩小,而是会被改变,因此不能用作loading图了
if (finalOptionsKey!!.contains("Resize")
|| finalOptionsKey.contains("ImageProcessor")
|| finalOptionsKey.contains("thumbnailMode")) {
finalOptionsKey = null
}
@Suppress("UNCHECKED_CAST")
val images = adapter!!.dataList as List<UnsplashImage>
val imageArrayList = ArrayList<Image>(images.size)
images.mapTo(imageArrayList) { Image(it.urls!!.regular!!, it.urls!!.raw!!) }
ImageDetailActivity.launch(activity, dataTransferHelper.put("urlList", imageArrayList), finalOptionsKey!!, position)
}
override fun onClickUser(position: Int, user: UnsplashImage.User) {
val uri = Uri.parse(user.links!!.html)
.buildUpon()
.appendQueryParameter("utm_source", "SketchSample")
.appendQueryParameter("utm_medium", "referral")
.appendQueryParameter("utm_campaign", "api-credit")
.build()
val intent = Intent(Intent.ACTION_VIEW)
intent.data = uri
startActivity(intent)
}
override fun onRefresh() {
if (adapter != null) {
adapter!!.loadMoreFinished(false)
}
if (!refresh_recyclerFragment.isRefreshing) {
refresh_recyclerFragment.isRefreshing = true
}
loadData(1)
}
override fun onLoadMore(adapter1: AssemblyAdapter) {
loadData(pageIndex 1)
}
private class LoadDataCallback internal constructor(fragment: UnsplashPhotosFragment, private val pageIndex: Int) : Callback<List<UnsplashImage>> {
private val reference: WeakReference<UnsplashPhotosFragment> = WeakReference(fragment)
init {
if (pageIndex == 1) {
fragment.hint_recyclerFragment.hidden()
}
}
override fun onResponse(call: Call<List<UnsplashImage>>, response: Response<List<UnsplashImage>>) {
val fragment = reference.get() ?: return
if (!fragment.isViewCreated) {
return
}
if (pageIndex == 1) {
create(fragment, response)
} else {
loadMore(fragment, response)
}
fragment.refresh_recyclerFragment.isRefreshing = false
}
override fun onFailure(call: Call<List<UnsplashImage>>, t: Throwable) {
val fragment = reference.get() ?: return
val activity = fragment.activity ?: return
if (!fragment.isViewCreated) {
return
}
if (pageIndex == 1) {
fragment.hint_recyclerFragment.failed(t, View.OnClickListener { fragment.onRefresh() })
fragment.refresh_recyclerFragment.isRefreshing = false
} else {
fragment.adapter!!.loadMoreFailed()
Toast.makeText(fragment.activity, HintView.getCauseByException(activity, t), Toast.LENGTH_LONG).show()
}
}
private fun create(fragment: UnsplashPhotosFragment, response: Response<List<UnsplashImage>>) {
val activity = fragment.activity ?: return
val images = response.body()
if (images == null || images.isEmpty()) {
fragment.hint_recyclerFragment.empty("No photos")
return
}
val adapter = AssemblyRecyclerAdapter(images)
adapter.addItemFactory(UnsplashPhotosItemFactory(activity, fragment))
adapter.setMoreItem(LoadMoreItemFactory(fragment))
fragment.recycler_recyclerFragment_content.adapter = adapter
fragment.adapter = adapter
fragment.changeBackground(images[0].urls!!.thumb)
}
private fun loadMore(fragment: UnsplashPhotosFragment, response: Response<List<UnsplashImage>>) {
val images = response.body()
if (images == null || images.isEmpty()) {
fragment.adapter!!.loadMoreFinished(true)
return
}
fragment.adapter!!.addAll(images)
fragment.adapter!!.loadMoreFinished(images.size < 20)
fragment.changeBackground(images[0].urls!!.thumb)
}
}
}

实例下载地址

仿抖音流的图片浏览app

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警