2017-04-04 56 views
0

我面临着视图之间的空间问题。使用LinerLayout并动态添加视图(ImageViews)到线性布局。如何在布局中重叠图像浏览

我想调整imageview之间的空间。我希望他们有一个重叠 - 当添加一个新的视图。

Current view of the app

目前蓝色回地面施加到突出两个线性布局。

代码图像视图添加到现有布局

dealerImages= (LinearLayout) findViewById(R.id.dealerImages); 
    dealerImages.setBackgroundColor(Color.BLUE); 

ImageView view = new ImageView(BlackJack.this); 
    view.setImageResource(R.drawable.back); 
    dealerImages.addView(view); 

我每次添加一个新的观点 - 我想指定的旧观点的相对位置。我希望新视图从布局中最后一个视图的中心开始。

请让我知道你是否需要任何额外的细节。请建议我是否需要使用其他布局来简化操作。

编辑 - 在这里

playerLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.MATCH_PARENT); 
    dealerLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.MATCH_PARENT); 


private void dealTwoCardsEach(){ 
    player.addCard(hit()); 
    ImageView imageView = new ImageView(BlackJack.this); 
    imageView.setImageResource(getResourceId(player.getFirstCard())); 
    playerImages.addView(imageView, player.getCards().size()-1); 

    dealer.addCard(hit()); 
    imageView = new ImageView(BlackJack.this); 
    imageView.setImageResource(getResourceId(dealer.getFirstCard())); 
    dealerImages.addView(imageView); 

    player.addCard(hit()); 
    if(player.getCount() == 21) 
     player.setBlackJack(true); 

    imageView = new ImageView(BlackJack.this); 
    imageView.setImageResource(getResourceId(player.getSecondCard())); 
    updateMarginForPlayer(); // updating start margin 
    playerImages.addView(imageView, player.getCards().size()-1, playerLayoutParams); 

    dealer.addCard(hit()); 
} 


private void updateMarginForPlayer(){ 
     playerLayoutParams.setMarginStart(playerLayoutParams.getMarginStart()+100); 
} 

发布的代码请不我没有设置第一卡播放器的任何保证金。 我可以看到这两个卡,直到这里。以0开始余量,并用100

private void handleHit(){ 
    Card c1 = hit(); 
    player.addCard(c1); 

    ImageView imageView = new ImageView(this); 
    imageView.setImageResource(getResourceId(c1)); 
    updateMarginForPlayer(); 
    playerImages.addView(imageView, playerLayoutParams); 

} 

开始余量在“命中”按钮点击所述第二图像的第一图像是当handleHit()被调用。并且添加的新图像使得从第2个到当前视图的所有图像都不可见。我只能看到第一个和最后一个(最新添加的)。

回答

0

A LinearLayout一个接一个地以线性方式堆叠视图。你永远不会创建一个只有LinearLayout的重叠布局,它总是会根据它定义的方向将它堆叠在当前视图旁边。

你正在寻找的是RelativeLayout在相对布局,视图堆叠相互依赖,因为它也是一个ViewGroup类相同的代码也适用于它。

检查相对布局文档here和他们比较简短后here

此外,当您创建一个孩子相对布局,您可以添加PARAMS到哪里就有奇迹或只需添加一个保证金是一半大小您的原始布局将它们从中心堆叠起来!

您不必调用更新参数,而是将params添加到imageview。

ImageView imageView = new ImageView(this); 
    imageView.setImageResource(getResourceId(c1)); 
     RelativeLayout.LayoutParams layoutParams= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    layoutParams.setMargins(100,0,0,0); 
    imageView.setLayoutParams(layoutParams); 

    playerImages.addView(imageView, playerLayoutParams); 
+0

谢谢。这似乎工作。但现在,在指定的边界添加新视图后,我无法看到它下面的视图。我只能看到第一个和最新的。是否有一个属性需要在添加子视图之前设置为始终可见。 – Lochan

+0

它们不可见,因为它们可能在最后一个视图下方,您可以发布您的代码,以便我可以为您编辑它! – MadScientist

+0

我用代码编辑了原始问题。请看一下。 – Lochan