有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何更快地加载(库)滑动图像?安卓

我如何才能使图像下载第一,并把它放在cach和当有人按下按钮,然后图像将直接显示没有延迟

为什么 现在我每次点击按钮都会有几秒钟的延迟,因为它们是从互联网加载的。这需要时间,这就是为什么我希望首先加载和缓存它们。因此,当有人点击按钮时,它将在一秒钟内直接显示

爪哇:

import 安卓.os.Bundle;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.view.View;
import 安卓.widget.Button;
import 安卓.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毫秒的延迟,这并不重要,因为我希望每次有人点击按钮时都有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
    安卓:layout_width="wrap_content"
    安卓:layout_height="wrap_content"
    安卓:text="Hello World!"
    安卓:id="@+id/textView2" />

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

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

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

</RelativeLayout>

共 (2) 个答案

  1. # 1 楼答案

    我不确定你能否加快滑行速度

    但是,如果要向用户显示加载,可以尝试添加一个侦听器,并且只在所有图像都准备好后才显示这些图像

    试试这个:

    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
                    }
                });
    
  2. # 2 楼答案

    Glide有一个用于预加载图像的专用API:

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

    Javadoc说:

    Preloads the resource into the cache using Target.SIZE_ORIGINAL as the target width and height. Equivalent to calling preload(int, int) with Target.SIZE_ORIGINAL as the width and height.