📌  相关文章
📜  如何从Android ImageView中的URL加载SVG?

📅  最后修改于: 2021-05-13 15:51:04             🧑  作者: Mango

可以看出,许多Android应用程序都需要使用在缩放时不会模糊的高质量图像。因此,我们必须使用高质量的图像。但是,如果我们使用的是PNG图像,则它们在缩放后会变得模糊,因为PNG图像由像素组成,并且在缩放后会降低其质量。因此,最好使用SVG图像,因为SVG图像由矢量组成,即使缩放后它们也不会降低质量。现在,我们将研究如何在我们的Android应用程序中从其URL加载SVG。

从URL加载SVG图像的步骤

步骤1:建立新的Android Studio专案

要创建一个新的Android Studio项目,只需单击“文件”>“新建”>“新项目” 。确保选择您的语言为Java 。您可以参考有关如何创建新的Android Studio项目的文章。

第2步:在转到编码部分之前,请在build.gradle中添加这两个依赖项

转到Gradle脚本> build.gradle(模块:应用程序)部分,添加以下依赖项,然后在上面的弹出窗口中单击“立即同步”。添加这两个依赖项。

步骤3:现在,我们将进入设计部分

导航到应用程序> res>布局> activity_main.xml以下是activity_main.xml文件的代码

XML


  
    
  


Java
import android.content.Context;
import android.widget.ImageView;
import com.pixplicity.sharp.Sharp;
import java.io.IOException;
import java.io.InputStream;
import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
  
public class Utils {
      
    private static OkHttpClient httpClient;
  
    // this method is used to fetch svg and load it into target imageview.
    public static void fetchSvg(Context context, String url, final ImageView target) {
        if (httpClient == null) {
            httpClient = new OkHttpClient.Builder()
                    .cache(new Cache(context.getCacheDir(), 5 * 1024 * 1014))
                    .build();
        }
  
        // here we are making HTTP call to fetch data from URL.
        Request request = new Request.Builder().url(url).build();
        httpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                // we are adding a default image if we gets any error.
                target.setImageResource(R.drawable.gfgimage);
            }
  
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                // sharp is a library which will load stream which we generated
                // from url in our target imageview.
                InputStream stream = response.body().byteStream();
                Sharp.loadInputStream(stream).into(target);
                stream.close();
            }
        });
    }
}


Java
import android.os.Bundle;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
  
    ImageView imageView;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
          
        // initialize your imageview
        imageView = findViewById(R.id.imageview);
          
        // url for .svg image
        String url = " ";
          
        // this method will load svg 
          // image in your imageview
        Utils.fetchSvg(this, url, imageView);
    }
}


XML


  
    
    
      
    
        
            
                
  
                
            
        
    
  


步骤4:现在将新的Java类创建为Utils

在这个Java类中,我们以字节流的形式从URL加载数据。锐利的库将转换此字节流,并将SVG图像加载到我们的目标ImageView中。要创建新的Java类,请导航至应用程序> Java >应用程序包名称>>右键单击它,然后单击它,然后单击新建> Java类。给您的JAVA类Java。以下是实用程序的代码。 Java文件。在代码内部添加了注释,以更详细地了解代码。

Java

import android.content.Context;
import android.widget.ImageView;
import com.pixplicity.sharp.Sharp;
import java.io.IOException;
import java.io.InputStream;
import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
  
public class Utils {
      
    private static OkHttpClient httpClient;
  
    // this method is used to fetch svg and load it into target imageview.
    public static void fetchSvg(Context context, String url, final ImageView target) {
        if (httpClient == null) {
            httpClient = new OkHttpClient.Builder()
                    .cache(new Cache(context.getCacheDir(), 5 * 1024 * 1014))
                    .build();
        }
  
        // here we are making HTTP call to fetch data from URL.
        Request request = new Request.Builder().url(url).build();
        httpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                // we are adding a default image if we gets any error.
                target.setImageResource(R.drawable.gfgimage);
            }
  
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                // sharp is a library which will load stream which we generated
                // from url in our target imageview.
                InputStream stream = response.body().byteStream();
                Sharp.loadInputStream(stream).into(target);
                stream.close();
            }
        });
    }
}

步骤5:现在,我们将在MainActivity中使用此Utils类。 Java文件以从URL加载图像

导航到应用程序> Java >您的应用程序包名称> MainActivity。 Java文件。下面是MainActivity的代码。 Java文件。在代码内部添加了注释,以更详细地了解代码。

Java

import android.os.Bundle;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
  
    ImageView imageView;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
          
        // initialize your imageview
        imageView = findViewById(R.id.imageview);
          
        // url for .svg image
        String url = " ";
          
        // this method will load svg 
          // image in your imageview
        Utils.fetchSvg(this, url, imageView);
    }
}

步骤6:在您的AndroidManifest文件中添加互联网权限

导航到应用程序>清单并添加Internet权限。

XML格式



  
    
    
      
    
        
            
                
  
                
            
        
    
  

输出:

来自Android输出中URL的SVG

想要一个节奏更快,更具竞争性的环境来学习Android的基础知识吗?
单击此处,前往由我们的专家精心策划的指南,以使您立即做好行业准备!