以编程方式居中查看位于 GridLayout 内的另一个视图(位于 RelativeLayout 内)

Center programmatically View inside another view that is inside GridLayout (that is inside RelativeLayout)

我想将 ImageView 置于按钮的中心(即在 GridLayout 内(即在包含所有内容的 RelativeLayout 内))。 我尝试了不同的选项,但 none 有效。

    ImageView image = new ImageView(getApplicationContext());
    image.setImageResource(R.drawable.heart);
    int lastSelectedID = currentIds.get(currentIds.size()-1);
    View lastButton = findViewById(lastSelectedID); //Is inside the GridLayout
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(100, 100);
//  lp.addRule(RelativeLayout.CENTER_IN_PARENT);                        
//  lp.addRule(RelativeLayout.CENTER_IN_PARENT, lastSelectedID);                        
//  lp.addRule(RelativeLayout.ABOVE, lastSelectedID);                       
    lp.addRule(RelativeLayout.ALIGN_LEFT, lastSelectedID);                      
    lp.addRule(RelativeLayout.ALIGN_RIGHT, lastSelectedID);                     
    image.setLayoutParams(lp);
    Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.spark);
    image.startAnimation(animation);
    final ViewGroup mainLayout = (ViewGroup) findViewById(R.id.layout_main); //relative layout that contains all
    mainLayout.addView(image);

我将新的 ImageView 放在 RelativeLayoute 中,而不是其内部 GridLayout。这是因为 ImageView 动画可以移到 GridLayout 之外。

你可以在相对布局中嵌套一个线性布局,然后使用myView.setX(myX)和myView.setY(myY)方法。

希望我能帮到你 :D

我是这样解决的:

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(100, 100);
lp.addRule(RelativeLayout.ALIGN_LEFT, gridLayout.getId());
lp.addRule(RelativeLayout.ALIGN_TOP, gridLayout.getId());
lp.setMargins(lastButtonPositionX, lastButtonPositionY, 0, 0);