2017-04-12 21 views
0

ループ内で複数のImageViewをダイナミックに作成しています。 すべてのImageViewの位置と画像が異なります。Android複数のImageViewをループで作成...奇妙な動作

最後に、それらをFrameLayoutに追加します。

FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(container.getWidth()/3, container.getHeight()/3); 
    ImageView imageView; 
    for(int i=0; i<cloths.size(); i++) { 
     imageView = new ImageView(getActivity(), null); 
     imageView.setAdjustViewBounds(true); 
     Glide.with(getActivity()).load(cloths.get(i).getImage()).into(imageView); 

     imageView.setOnTouchListener(touchListener); 

     params.leftMargin = (int) cloths.get(i).getxPos(container.getWidth()); 
     params.topMargin = (int) cloths.get(i).getyPos(container.getHeight()); 
     params.rightMargin = 0; 
     params.bottomMargin = 0; 

     imageView.setScaleY(cloths.get(i).getScale()); 
     imageView.setScaleX(cloths.get(i).getScale()); 

     container.addView(imageView, params); 

    } 

の代わりにすべて正しくimageviewsを配置、それらはすべて、最後のImageViewの位置の上で互いの上に敷設されています。

enter image description here

任意のアイデアはどのようにそれを修正するには? 何が間違っていますか?

+1

異なるマージンのImageViewごとに同じ 'params'を使用します。なぜFrameLayoutを使用していますか? FrameLayoutは9つの位置にビューを保存できます。ビューの位置を変更するには、マージンを変更するのは適切ではありません。 –

+0

ImageViewsはDrag&Dropが可能なので、私はFrameLayoutを使用します! 余白は、コンテナにイメージビューを追加するときの開始マージンにすぎません! – Chrissss

+0

しかし、私に解決策を教えてくれました... すべてのループ実行で新しいパラメータを作成するのが解決策でした! – Chrissss

答えて

0

希望の位置とサイズがわかっていると仮定すると(getyPos()が示唆しているように)、すべてのサイズを集約して画像を重ね合わせることができます。サイズがわからない場合は、グライドを使って見つけることができます(または画像が到着した後でビューを測定するだけです)。

public void putImages(FrameLayout container){ 
    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(container.getWidth()/3, container.getHeight()/3); 

    int topMargin = 0; 
    for(int i=0; i<cloths.size(); i++) { 
     ImageView imageView = new ImageView(getActivity(), null); 
     imageView.setAdjustViewBounds(true); 
     Glide.with(getActivity()).load(cloths.get(i).getImage()).into(imageView); 

     imageView.setOnTouchListener(touchListener); 

     params.leftMargin = (int) cloths.get(i).getxPos(container.getWidth()); 
     params.topMargin = topMargin; 
     params.rightMargin = 0; 
     params.bottomMargin = 0; 

     topMargin += (int) cloths.get(i).getyPos(container.getHeight()); 

     imageView.setScaleY(cloths.get(i).getScale()); 
     imageView.setScaleX(cloths.get(i).getScale()); 

     container.addView(imageView, params); 
    } 
} 
関連する問題