如何将来自URL的图像加载到ViewPager中

3

我在互联网上搜索了这个问题,但是没有找到什么好的答案。我查看了Android Developer网站,但他们只讲述如何将一个URL地址的图片加载到ImageView中。

这是我的代码:

Openfactsscreen活动:

public class Openfactsscreen extends Activity {




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_openfactsscreen); 

        ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
        ImageAdapter adapter = new ImageAdapter(this);
        viewPager.setAdapter(adapter);
        }

        public void openmenu(View view){
        Intent intent = new Intent(this, SendFact.class);
        startActivity(intent); }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.openfactsscreen, menu);
        return true;
 }

}

ImageAdapter.java:

public class ImageAdapter extends PagerAdapter {

        Context context;
        private int[] GalImages = new int[] {
        R.drawable.factcard2,
        R.drawable.factcard8,
        R.drawable.factcard4
        };



        ImageAdapter(Context context){
        this.context=context;
        }
        @Override
        public int getCount() {
        return GalImages.length;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
        return view == ((ImageView) object);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
        ImageView imageView = new ImageView(context);
        int padding = context.getResources().getDimensionPixelSize(R.dimen.padding_medium);
        imageView.setPadding(padding, padding, padding, padding);
        imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        imageView.setImageResource(GalImages[position]);
        ((ViewPager) container).addView(imageView, 0);
        return imageView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
        ((ViewPager) container).removeView((ImageView) object);
        }


}

activity_openfactsscreen :

    <RelativeLayout    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/backgroundotheractivities" >

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/imageView1" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/factsscreen_layout" />

    <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="23dp"
        android:layout_marginTop="18dp"
        android:background="@drawable/emailbutton"
        android:onClick="openmenu" />

    <ImageButton
        android:id="@+id/imageButton2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/imageButton1"
        android:layout_toRightOf="@+id/imageButton1"
        android:background="@drawable/informationbutton" />

</RelativeLayout>

一切都正常运行,如果有人知道一个好的网站可以查看或者有人想帮助我,那就太好了!

无论如何,感谢您的时间,祝您有愉快的一天!


我没有它们,也不知道该如何开始。 - DyRight
你说没有它们,是什么意思? - Muthu
我已经准备好链接,但是没有相应的代码。 - DyRight
2个回答

6
将以下代码添加到您的类末尾:`

`
public class ImageAdapter extends PagerAdapter {

        Context context;
        private int[] GalImages = new int[] {
        R.drawable.factcard2,
        R.drawable.factcard8,
        R.drawable.factcard4
        };



        ImageAdapter(Context context){
        this.context=context;
        }
        @Override
        public int getCount() {
        return GalImages.length;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
        return view == ((ImageView) object);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
        ImageView imageView = new ImageView(context);
        int padding = context.getResources().getDimensionPixelSize(R.dimen.padding_medium);
        imageView.setPadding(padding, padding, padding, padding);
        imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        //imageView.setImageResource(GalImages[position]);

        new LoadImage(imageView).execute("Your URL");

        ((ViewPager) container).addView(imageView, 0);
        return imageView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
        ((ViewPager) container).removeView((ImageView) object);
        }



     private class LoadImage extends AsyncTask<String, String, Bitmap> {
            ImageView img=null;
            public LoadImage(ImageView img){
                this.img=img;
            }
            @Override
            protected void onPreExecute() {
                super.onPreExecute();

            }
            protected Bitmap doInBackground(String... args) {
                Bitmap bitmap=null;
                try {
                    bitmap = BitmapFactory.decodeStream((InputStream)new URL(args[0]).getContent());
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return bitmap;
            }
            protected void onPostExecute(Bitmap image) {
                if(image != null){
                    img.setImageBitmap(image);
                }
            }
        }`
     } 

使用以下代码加载图片:new LoadImage(imageView).execute("您的URL"); - Muthu
你应该在你的类之外添加一个类。 - Muthu
你能把这个移到类里面吗?试试看! - Muthu
你好,我能找到与你联系的方式吗? - DyRight
我想学一些东西,而你似乎是完美的老师。当然,只有在你有时间的情况下。 - DyRight
显示剩余7条评论

0
你可以尝试这个简单的代码:
    URL url = new URL("yourURL");
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
imageView.setImageBitmap(bmp);

否则,您可以查看此答案

另外,您也可以尝试这个:

 try {
  ImageView i = (ImageView)findViewById(R.id.image);
  Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(URL).getContent());
  i.setImageBitmap(bitmap); 
} catch (MalformedURLException e) {
  e.printStackTrace();
} catch (IOException e) {
  e.printStackTrace();
}

它在这里给我一个错误: 语法错误,此标记后应有VariableDeclaratorId“bmp”,以及 语法错误,放置不当的构造体标记(s)。 - DyRight
尝试使用public static Bitmap bmp或者只是public BitMap bmp - Skizo-ozᴉʞS ツ
谢谢你的时间,仍然出现错误,它说我必须添加“}”,但是当我这样做时,它没有改变任何东西。 - DyRight
你试过我的两个答案了吗?你看到链接的帖子了吗? - Skizo-ozᴉʞS ツ
是的,我看了一下,并尝试了你们两个的答案。 - DyRight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接