gpt4 book ai didi

android - 使用 glide 添加进度条

转载 作者:行者123 更新时间:2023-11-30 05:06:12 26 4
gpt4 key购买 nike

我有一个图片库,其中的图片是从 url 加载的,加载图片需要一些时间。所以我想进度条。我尝试添加一个动画可绘制对象并添加一个占位符,但在这种情况下,加载器图像占用的空间与图像一样大。我希望占位符显示为普通进度条。

代码:

点选择器

<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/selected_dot" android:state_selected="true"/>
<item android:drawable="@drawable/default_dot"/>
</selector>

进度动画

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item android:gravity="center">
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/loading"
android:padding="50dp"
android:pivotX="50%"
android:pivotY="50%" />
</item>
</layer-list>

我也尝试通过添加监听器来滑行,但这里没有运气,因为我无法访问监听器类中的 viewholder 元素。

using System;
using System.Collections.Generic;
using System.Linq;
using Android.App;
using Android.Support.V7.Widget;
using Android.Views;
using Android.Widget;
using Com.Bumptech.Glide;
using Com.Bumptech.Glide.Load.Resource.Drawable;
using Provenance.Models;
using Com.Bumptech.Glide.Request;
using Com.Bumptech.Glide.Request.Target;
using Com.Bumptech.Glide.Load;
using Com.Bumptech.Glide.Load.Engine;
using Java.Lang;

namespace Provenance.Android.Adapters
{
public class ViewDocumentAdapter : RecyclerView.Adapter, IRequestListener
{
#region Variable Declarations
public List<DocumentImageURL> _items;
private readonly Activity _context;
public event EventHandler<int> ItemClick;
#endregion

public ViewDocumentAdapter(Activity activity, IEnumerable<DocumentImageURL> images)
{
_items = images.ToList();
_context = activity;
}

void OnClick(int position)
{
if (ItemClick != null)
{
ItemClick(this, position);
}
}

public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
{
View itemView = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.imageListItem, parent, false);
DocumentViewHolder vh = new DocumentViewHolder(itemView, OnClick);
return vh;
}

public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
DocumentViewHolder vh = holder as DocumentViewHolder;
var chemical = _items[position];
// vh.imageView.SetImageResource(Resource.Drawable.logo);//_items[position]);
DrawableTransitionOptions options = new DrawableTransitionOptions();
options.CrossFade();
//.transition(DrawableTransitionOptions.withCrossFade())
Glide.With(_context)
.Load(_items[position].Thumbnail)
.Apply(new Com.Bumptech.Glide.Request.RequestOptions()
.Placeholder(Resource.Drawable.progress_animation)//Android.Resource.Drawable.ic_document)
.Error(Resource.Drawable.ic_exclaimation)
.FitCenter())
.Transition(options)
.Listener(this)
//.Apply(RequestOptions.CircleCropTransform())
.Into(vh.imageView);
}

public DocumentImageURL getSelectItem(int position)
{
return _items[position];
}

public bool OnLoadFailed(GlideException p0, Java.Lang.Object p1, ITarget p2, bool p3)
{
return false;
}

public bool OnResourceReady(Java.Lang.Object p0, Java.Lang.Object p1, ITarget p2, DataSource p3, bool p4)
{
///cant access progressbar<----
return false;
}

public override int ItemCount
{
get { return _items.Count; }
}

public class DocumentViewHolder : RecyclerView.ViewHolder
{
public ImageView imageView { get; set; }
public ProgressBar progress { get; set; }
// Get references to the views defined in the CardView layout.
public DocumentViewHolder(View itemView, Action<int> listener) : base(itemView)
{
imageView = itemView.FindViewById<ImageView>(Resource.Id.imageView);
progress = itemView.FindViewById<ProgressBar>(Resource.Id.progress);
itemView.Click += (sender, e) => listener(base.Position);
}
}
}
}

谁能提出更好的选择。

最佳答案

我设法通过将 DocumentViewHolder 参数传递给监听器类来解决此问题:

修改后的代码:

public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
DocumentViewHolder vh = holder as DocumentViewHolder;
var chemical = _items[position];
DrawableTransitionOptions options = new DrawableTransitionOptions();
options.CrossFade();
Glide.With(_context)
.Load(_items[position].Thumbnail)
.Apply(new Com.Bumptech.Glide.Request.RequestOptions()
.Placeholder(Resource.Drawable.progress_animation)//Android.Resource.Drawable.ic_document)
.Error(Resource.Drawable.ic_exclaimation)
.FitCenter())
.Transition(options)
.Listener(new listenerImage(vh))
.Into(vh.imageView);
}

internal class listenerImage : Java.Lang.Object,IRequestListener
{
private DocumentViewHolder holder;

public listenerImage(DocumentViewHolder holder)
{
this.holder = holder;
}

public bool OnLoadFailed(GlideException p0, Java.Lang.Object p1, ITarget p2, bool p3)
{
return false;
}

public bool OnResourceReady(Java.Lang.Object p0, Java.Lang.Object p1, ITarget p2, DataSource p3, bool p4)
{
holder.progress.Visibility = ViewStates.Gone;
return false;
}
}

关于android - 使用 glide 添加进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54550437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com