Android ViewPager和从web加载图像
我需要做一个像图片库一样工作的小应用程序:我应该使用查看页面,当用户向左或向右滑动时,应用程序应该从url加载图像。我有一个带有URL的数组,当用户滑动到新页面时,它应该开始加载特定的图像(它不应该在开始时加载所有图像)。例如,如果我在第一页,我应该看到url中的第一个图像(数组中的索引0)。当我滑动到第二页时,应用程序应该开始从索引1加载图像,当加载完成时,它应该出现在屏幕上。我让view pager处理来自资源的图像,但无法处理远程图像Android ViewPager和从web加载图像,android,image,android-viewpager,Android,Image,Android Viewpager,我需要做一个像图片库一样工作的小应用程序:我应该使用查看页面,当用户向左或向右滑动时,应用程序应该从url加载图像。我有一个带有URL的数组,当用户滑动到新页面时,它应该开始加载特定的图像(它不应该在开始时加载所有图像)。例如,如果我在第一页,我应该看到url中的第一个图像(数组中的索引0)。当我滑动到第二页时,应用程序应该开始从索引1加载图像,当加载完成时,它应该出现在屏幕上。我让view pager处理来自资源的图像,但无法处理远程图像 我不应该使用任何现有的库、代码或类似的东西。以下是我目
我不应该使用任何现有的库、代码或类似的东西。以下是我目前的代码: 主要活动:
urls = new int[] {
R.drawable.i1, R.drawable.i2, R.drawable.i3, R.drawable.i4, R.drawable.i5
};
viewPager = (ViewPager) findViewById(R.id.pager);
adapter = new ViewPagerAdapter(MainActivity.this, urls);
viewPager.setAdapter(adapter);
这是我的视图适配器:
public ViewPagerAdapter(Context context, int[] urls) {
this.context = context;
this.urls = urls;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.viewpager_item, container,
false);
// Locate the TextViews in viewpager_item.xml
imgflag = (ImageView) itemView.findViewById(R.id.image);
imgflag.setImageResource(urls[position]);
((ViewPager) container).addView(itemView);
return itemView;
}
layout.viewpager_item.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:padding="10dp" >
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="#000000"
android:padding="1dp" />
有什么建议吗?您可以使用像 或:
我有一个示例代码,但我现在正在工作。。。若这个问题并没有答案,我将帮助你们解决这个问题,我不应该使用任何现有的图书馆。只有来自ADKI的东西尝试了你的代码,它编译和构建,但不起作用-图像不会加载到图像视图中。我将task.execute()放在((ViewPager)container.addView(itemView)之前;尝试调试,看看doInBackground()方法中是否有异常,我刚刚修复了它。setImageBitmap(image)应该位于受保护的void onPostExecute(void result)方法内部,而不是doInBackground。非常感谢。
Picasso.with(context).load(urls[position]).into(imgflag);
public class AsynImageLoader extends AsyncTask<Void,Void,Void>{
public String url;
public ImageView img ;
public AsynImageLoader(ImageView img,String url){
this.url = url;
this.img = img;
}
@Override
protected Void doInBackground(Void... params) {
try {
Bitmap bitmap;
URL imageUrl = new URL(url);
HttpURLConnection connection;
if (url.startsWith("https://")) {
connection = (HttpsURLConnection) imageUrl.openConnection();
} else {
connection = (HttpURLConnection) imageUrl.openConnection();
}
connection.setConnectTimeout(30000);
connection.setReadTimeout(30000);
connection.setInstanceFollowRedirects(true);
InputStream is = connection.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
if(img!=null){
img.setImageBitmap(bitmap);
}
}catch(Exception e){
}
return null;
}
}
AsynImageLoader task = new AsynImageLoader(imgflag,urls[position]);
task.execute();