在Android应用程序中显示来自URL的图像?
问题描述:
我正在尝试制作解析HTML并检索图像并创建新闻或帖子列表的应用程序。在Android应用程序中显示来自URL的图像?
我有一个显示图像的问题,因为当我下载它的大,当我尝试使用位图解码来取样图像的大小ListClass对象只支持整数的数组(R.id ... )。
我研究过使用InputStream,但它只支持Drawable。有没有办法从网站上显示我的名单上的图像,所以它不会分配太多的内存,导致应用程序变慢?
主要活动图片;
我的MainActivity;
[![import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.FragmentManager;
import android.widget.FrameLayout;
import android.widget.Button;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
ListView list;
String\[\] web = {
"asd "};
Integer\[\] imageId = {
R.drawable.pol};
Handler handler;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
TextView text = (TextView)findViewById(R.id.textView);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
listClass adapter = new
listClass(MainActivity.this, web, imageId);
list=(ListView)findViewById(R.id.list);
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainActivity.this, "You Clicked at " +web\[+ position\], Toast.LENGTH_SHORT).show();
}
});
}
InputStream类我试图实现;
import android.media.Image;
import java.net.URL;
import android.graphics.BitmapFactory;
import java.io.InputStream;
import android.graphics.drawable.Drawable;
public class imageHandler {
Image picture;
public static Drawable LoadImageFromWebOperations(String url) {
try {
InputStream is = (InputStream) new URL(url).getContent();
Drawable d = Drawable.createFromStream(is, "earthdownload");
return d;
} catch (Exception e) {
return null;
}
}
}
答
试试这个还要根据you..or固定大小看调整大小与通用装载机
<ImageView
android:id="@id/ivImage"
android:layout_width="150dp"
android:layout_height="150dp"
android:adjustViewBounds="true"
android:scaleType="fitCenter" />
用过Android通用图像,装载机
申报
private ImageLoader imageLoader1;
在没有任何图像加载在高速缓存中创建
imageLoader1 = ImageLoader.getInstance();
imageLoader1.init(ImageLoaderConfiguration.createDefault(getActivity()));
no_image这里绘制的图像
DisplayImageOptions
options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.showImageOnLoading(R.drawable.no_image) // resource or drawable
.showImageForEmptyUri(R.drawable.no_image) // resource or drawable
.showImageOnFail(R.drawable.no_image)
.considerExifParams(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
imageLoader1.displayImage(yourpath.replace(" ", "%20"), ivImage, options);
您可以使用Piccaso也和滑翔也
使用Glide库从url加载图片请参考:http://coderzpassion.com/android-working-glide-image-loader-library/ –
它总是更好地使用图像下载库开发应用程序已广泛处理与位图。如果您使用自己的机制从网上下载图像,并尝试在列表视图中显示它。当然你会得到outofmemory异常。为了避免这个异常,你必须考虑缓存机制,位图大小调整和内存分配。而不是简单的你去图像下载库。 – Vishwa
BitmapFactory可以非常好地解码和缩小输入流。所以你让自己成了一个问题。 – greenapps