如何动态添加图像到包含imageview的viewpager?

时间:2014-01-08 12:22:52

标签: android android-layout android-viewpager

我的main_layout中有一个viewpager。视图寻呼机仅包含RelativeLayout

包装的ImageView

我想要做的是当用户点击按钮时,它会将图像添加到该特定的viewpager。

我在stackoverflow上找到了这个答案(我认为这与我的问题有关),但是我完全迷失了这段代码。

Dynamically Adding View to viewpager

到目前为止,这是我的代码:

MainActivity.Java

private PagerAdapter pAdapter;
private ViewPager photoPager;

...

pAdapter = new GalleryPagerAdapter(getApplicationContext());
photoPager.setAdapter(pAdapter);

GalleryPagerAdapter.java

public class GalleryPagerAdapter extends PagerAdapter{

    private final Context context;
    LayoutInflater inflater;
    private final int[] GalImages = new int[] {
        R.drawable.ic_launcher,
        R.drawable.ic_launcher,
        R.drawable.ic_launcher
    };

    public GalleryPagerAdapter(Context context){
        this.context=context;
    }

    @Override
    public int getCount() {
        return GalImages.length;
    }

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

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        ImageView imageView = new ImageView(context);
        int padding = 10;
        imageView.setPadding(padding, padding, padding, padding);
        imageView.setScaleType(ImageView.ScaleType.MATRIX);
        imageView.setImageResource(GalImages[position]);
        container.addView(imageView, 0);
        return imageView;
    }

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

这是我想动态添加的视图

<?xml version="1.0" encoding="utf-8"?>
<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/photo_thumb"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="#000000"
        android:scaleType="fitXY"
        android:padding="0dp" />
</RelativeLayout>

这是我的ViewAager存在的MainActivity

MainActivity.xml
<LinearLayout
    android:id="@+id/bannerLayout"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="0.4"
    android:layout_margin="0dip"
    android:orientation="vertical">
    <android.support.v4.view.ViewPager
        android:id="@+id/photoPager"
        android:layout_width="fill_parent"
        android:layout_height="125dp"
        android:background="#4F4E4F"/>
</LinearLayout>

所以我的问题是如何改进我正在使用的代码,以便我可以动态地将新图像添加到我的ViewPager

ps:在参考链接上(我非常认为与我的问题相关),我完全迷失在这一部分:

// Create an initial view to display; must be a subclass of FrameLayout.
FrameLayout v0 = (FrameLayout) inflater.inflate (R.layout.one_of_my_page_layouts, null);
pagerAdapter.addView (v0, 0);

什么是inflater?我应该将它初始化为什么?

我希望有人可以指导我。如果我在这里提出多个问题,我很抱歉。

1 个答案:

答案 0 :(得分:3)

Inflater用于从xml布局中创建View对象。

所以,如果您的毕业典礼R.layout.one_of_my_page_layouts

<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/photo_thumb"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="#000000"
        android:scaleType="fitXY"
        android:padding="0dp" />
</RelativeLayout>

Inflater会做这样的事情(只是一个例子)

ImageView iv=new ImageView(context);
RelativeLayout rl=new RelativeLayout(context);
rl.add(iv)
return rl;

只需要最小的代码,但inflater也会设置所有布局参数。

因此,如果你有一个xml,你可以像在instantiateItem中那样动态创建一个视图,而不是像它一样膨胀它,并获得一个Type视图对象。

因此,您可以将instantiateItem更改为:

 public Object instantiateItem(ViewGroup container, int position) {
        RelativeLayout v0 = (RelativeLayout ) inflater.inflate (R.layout.one_of_my_page_layouts, null);

        ImageView imageView = vo.findViewById(R.id.photo_thumb);
        int padding = 10;
        imageView.setPadding(padding, padding, padding, padding);
        imageView.setScaleType(ImageView.ScaleType.MATRIX);
        imageView.setImageResource(GalImages[position]);
        container.addView(v0, 0);
        return v0;
    }