簡體   English   中英

如何更快地加載(庫)Glide Images? 安卓系統

[英]How to load (libary)Glide Images quicker? Android

我如何首先下載圖像並將其放入緩存中,當有人按下按鈕時,圖像將立即顯示而不會延遲。

為什么? 現在,每次我單擊按鈕時,都會有幾秒鍾的延遲,因為它們是從Internet加載的。 這需要時間,這就是為什么我希望它們先被加載和緩存。 因此,當有人單擊該按鈕時,它將在一秒鍾內直接顯示。

Java:

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.squareup.picasso.Picasso;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

private int a;
ImageView ivImageFromUrl;
@Override

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ivImageFromUrl=(ImageView)findViewById(R.id.iv_image_from_url);
}

public void buttonOnClick(View v)  {
    // do something when the button is clicked
    final Button button = (Button) v;
    button.setEnabled(false);

    Timer buttonTimer = new Timer();
    buttonTimer.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

不要看1000 ms的延遲,這並不重要,因為我希望每次有人單擊按鈕時都延遲1秒。 我也做了延遲,以使其看起來像正在加載,但這不是很好。有時我必須等待5秒才能加載圖像。

@Override
                public void run() {
                    button.setEnabled(true);
                }
            });
        }
    }, 1000);
    ((Button) v).setText("Random image");
    a = (int) (Math.random() * 4);

    switch (a) {
        case 0:

            Glide.with(this).load("imagelink").into(ivImageFromUrl);
            break;
        case 1:
            Glide.with(this).load("imagelink").into(ivImageFromUrl);
            break;
        case 2:
            Glide.with(this).load("imagelink").into(ivImageFromUrl);
            break;
        case 3:
            Glide.with(this).load("imagelink").into(ivImageFromUrl);
            break;
        case 4:
            Glide.with(this).load("imagelink").into(ivImageFromUrl);
            break;
    }
 }
}

XML:

 <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:id="@+id/textView2" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Image text"
    android:id="@+id/textView"
    android:layout_below="@+id/textView2"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="82dp" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Image"
    android:id="@+id/button"
    android:onClick="buttonOnClick"
    android:layout_below="@+id/textView"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="41dp" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/iv_image_from_url"
    android:layout_alignParentBottom="true"
    android:layout_alignRight="@+id/textView"
    android:layout_alignEnd="@+id/textView"
    android:layout_marginBottom="106dp"
    android:layout_toRightOf="@+id/textView"
    android:layout_toEndOf="@+id/textView" />

</RelativeLayout>

Glide具有專用於預加載圖像的API:

Glide.with(this).load(uri).preload();

Javadoc說:

使用Target.SIZE_ORIGINAL作為目標寬度和高度將資源Target.SIZE_ORIGINAL到緩存中。 等效於使用Target.SIZE_ORIGINAL作為寬度和高度調用preload(int, int)

我不確定您是否可以加快Glide的速度。

但是,如果要向用戶顯示負載,則可以嘗試添加偵聽器,並僅在所有圖像准備就緒后才顯示圖像。

嘗試這個:

Glide.with(this).load("imagelink").into(new GlideDrawableImageViewTarget(ivImageFromUrl) {
                @Override
                public void onLoadFailed(Exception e, Drawable errorDrawable) {

                  //Handle error
                }

                @Override
                public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> animation) {

                    //Hide loading, show image
                }
            });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM