2016-11-24 76 views
0

我必须创建动态列表Imageview连续,每个Imageview下有一个其他Imageview(点可绘制)。 看到下面的照片这是我期望的看法。Dynamiclly创建图像

enter image description here

这里是我的源泉。

 for (int i = 0; i < 9; i++) { 

     RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
     RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
     ImageView catImg = new ImageView(getApplicationContext()); 
     catImg.setImageResource(bottDrawableArr[i]); 
     catImg.setId(View.generateViewId()); 
     int dp = (int) utiles.convertDpToPixel(27, getApplicationContext()); 
     params1.height = dp; 
     params1.width = dp; 
     ImageView dotImg = new ImageView(getApplicationContext()); 
     dotImg.setImageResource(R.mipmap.dot); 
     dotImg.setId(View.generateViewId()); 

     params2.addRule(RelativeLayout.BELOW, dotImg.getId()); 
     dockBg.addView(catImg, params1); 
     dockBg.addView(dotImg, params2); 

    } 

,但我无法让我的愿望来看,

,而我的观点表明这样

enter image description here

我试图把点每幅图像下却无法实现这一目标。任何帮助将appriciated

+0

你必须创建他们动态通过代码?或者你可以使用RecyclerView和ViewHolders并将可绘制资源列表传递给适配器? –

+0

我想通过代码创建,其简单的数组无需使用Adapter。 –

+0

我不限制使用我的代码,如果有任何其他方式像RecyclerView和viewHolder它将是好的 –

回答

1

最好的办法正在与一些LinearLayout,这样的事情:

LinearLayout layout = new LinearLayout(this); 
layout.setOrientation(LinearLayout.HORIZONTAL); 

for (int i = 0; i < 9; i++) { 

    LinearLayout layoutChild = new LinearLayout(this); 
    layoutChild.setOrientation(LinearLayout.VERTICAL); 

    RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    ImageView catImg = new ImageView(getApplicationContext()); 
    catImg.setImageResource(bottDrawableArr[i]); 
    catImg.setId(View.generateViewId()); 
    int dp = (int) utiles.convertDpToPixel(27, getApplicationContext()); 
    params1.height = dp; 
    params1.width = dp; 
    ImageView dotImg = new ImageView(getApplicationContext()); 
    dotImg.setImageResource(R.mipmap.dot); 
    dotImg.setId(View.generateViewId()); 

    params2.addRule(RelativeLayout.BELOW, dotImg.getId()); 
    layoutChild.addView(catImg, params1); 
    layoutChild.addView(dotImg, params2); 
    layout.addView(layoutChild); 
} 

dockBg.addView(layout); 

注:,最好删除,如设置一些规则不必要的属性...

+0

110%right.Thanks –

0
params2.addRule(RelativeLayout.BELOW, dotImg.getId()); 

这行代码看起来像你想添加规则,把dotImgdotImg下方。用catImg.getId()代替,应该可以解决你的问题。

虽然考虑一个RecyclerView可能是一个好主意,或者如果它是一个静态数组(总是相同的项目),那么你可以创建一个新的布局文件,并在需要时将它膨胀。

+0

基本上它不是静态数组它可能会改变 –

+0

你也是对的。 RecyclerView是第二好的选择 –