在相对布局Android中动态显示多个ImageView

Posted

技术标签:

【中文标题】在相对布局Android中动态显示多个ImageView【英文标题】:Show Multiple ImageViews Dynamically in Relative Layout Android 【发布时间】:2013-10-29 09:54:44 【问题描述】:

我正在使用 android 应用程序 其中 相对布局是

  <ImageView
    android:id="@+id/imageView1"
    android:layout_
    android:layout_
    android:layout_marginTop="2dp"
    android:adjustViewBounds="true"
    android:background="@drawable/background" />
<RelativeLayout
    android:id="@+id/mymainlayout"
    android:layout_
    android:layout_
    android:layout_centerHorizontal="true"
      android:layout_centerVertical="true"
    >

</RelativeLayout>

我的问题是我无法在这个相对布局中以编程方式绘制所有 ImageView,它只显示一个图像。 这是我的代码

    for (int i = 0; i < realAnswer; i++) 

        arrayofImages[i] = new ImageView(this);
        arrayofImages[i].setImageResource(imageId[imageNumber]);
        arrayofImages[i].setId(i);
        if(i!=0)
        
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.LEFT_OF,  arrayofImages[i-1].getId());
        //arrayofImages[i].setLayoutParams(params);
        nn.addView(arrayofImages[i],params);
        
    else
        
            nn.addView(arrayofImages[i]);
        

    

这里 nn 是我的主要布局

任何帮助请???

【问题讨论】:

您应该动态添加图像视图,请参阅[在此处输入链接描述][1] [1]:***.com/questions/16942486/… 你到底想达到什么目的? 我想在布局中显示 10 张图片。之前我使用了线性布局,但它最多只显示 7 张图像。权重总和为 10。 【参考方案1】:

您的代码运行良好,除了

 params.addRule(RelativeLayout.LEFT_OF,  arrayofImages[i-1].getId());

RelativeLayout.LEFT_OF它一直把图像设置在左边,你看不到它。

将上面的代码替换为

params.addRule(RelativeLayout.RIGHT_OF,
                        arrayofImages[i - 1].getId());

这将在水平方向显示图像。

像这样更新了你的 for 循环

for (int i = 0; i < 5; i++) 

            arrayofImages[i] = new ImageView(this);
            arrayofImages[i].setImageResource(R.drawable.ic_launcher);
            arrayofImages[i].setId(i);
            if (i != 0) 
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                        RelativeLayout.LayoutParams.WRAP_CONTENT,
                        RelativeLayout.LayoutParams.WRAP_CONTENT);
                params.addRule(RelativeLayout.RIGHT_OF,
                        arrayofImages[i - 1].getId());
                // arrayofImages[i].setLayoutParams(params);
                nn.addView(arrayofImages[i], params);
             else 
                nn.addView(arrayofImages[i]);
            

        

【讨论】:

【参考方案2】:

如果您使用RelativeLayout 只是为了保存您正在动态添加的imageviews,那么请使用LinearLayout。这将解决您的问题。

【讨论】:

我之前使用过线性布局,但问题是线性布局没有显示所有 10 个图像,它只显示最多 7 个图像。不超过七个。重量总和为 10 @NoamanAkram 你必须使用滚动视图来显示超过 10 张图像。滚动视图将有另一个线性,也将有方向【参考方案3】:

看看这可能对你有用:

 public class MainActivity extends Activity 

    @Override
    public void onCreate(Bundle savedInstanceState) 
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      ViewPagerAdapter adapter = new ViewPagerAdapter(this, imageArra);
      ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager);
      myPager.setAdapter(adapter);
      myPager.setCurrentItem(0);
    

    private int imageArra[] =  R.drawable.gallery_photo_1, R.drawable.gallery_photo_2,
     R.drawable.gallery_photo_3, R.drawable.gallery_photo_5,
     R.drawable.gallery_photo_6, R.drawable.gallery_photo_7,
     R.drawable.gallery_photo_8, R.drawable.ic_launcher ;

   

和 ViewPagerAdapter:

public class ViewPagerAdapter extends PagerAdapter 

 Activity activity;
 int imageArray[];

 public ViewPagerAdapter(Activity act, int[] imgArra) 
 imageArray = imgArra;
 activity = act;
 

 public int getCount() 
  return imageArray.length;
 

 public Object instantiateItem(View collection, int position) 
   ImageView view = new ImageView(activity);
   view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
    LayoutParams.FILL_PARENT));
  view.setScaleType(ScaleType.FIT_XY);
  view.setBackgroundResource(imageArray[position]);
  ((ViewPager) collection).addView(view, 0);
 return view;


@Override
public void destroyItem(View arg0, int arg1, Object arg2) 
 ((ViewPager) arg0).removeView((View) arg2);


@Override
public boolean isViewFromObject(View arg0, Object arg1) 
 return arg0 == ((View) arg1);


 @Override
 public Parcelable saveState() 
  return null;
 

xml 文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:orientation="vertical" >

<android.support.v4.view.ViewPager
android:id="@+id/myfivepanelpager"
android:layout_
android:layout_ >

<ImageView
    android:id="@+id/image"
    android:layout_
    android:layout_
    android:src="@drawable/ic_launcher" >

</ImageView>
</android.support.v4.view.ViewPager>

</LinearLayout>

【讨论】:

以上是关于在相对布局Android中动态显示多个ImageView的主要内容,如果未能解决你的问题,请参考以下文章

Android在相对布局前面设置ImageView

C# 窗体,里多个控件布局相对居中

自定义 Android 视图在线性和相对布局中显示不同

视图不显示在相对布局中

视图未在 Android 的相对布局中显示 [重复]

android 存在数据库中的动态图片,如何读取出来,显示在ImageView中