在垂直线性布局中翻转按钮位置

时间:2016-01-18 09:49:03

标签: android xml android-layout

我正在寻找一种方法来在线性布局垂直上翻转按钮这里是按钮的屏幕截图 enter image description here

xml代码是

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="bottom"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:id="@+id/buttons_layout">

    <ImageButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/iv_green"
        android:layout_weight="1.0"
        android:src="@drawable/leaf_green"
        android:layout_gravity="fill_vertical"
        android:scaleType="fitXY"
        android:onClick="HandleClick" />
    <ImageButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/iv_other"
        android:layout_weight="1.0"
        android:src="@drawable/leaf_other"
        android:layout_gravity="fill_vertical"
        android:scaleType="fitXY"
        android:onClick="HandleClick" />
    <ImageButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/iv_red"
        android:layout_weight="1.0"
        android:src="@drawable/leaf_red"
        android:layout_gravity="fill_vertical"
        android:scaleType="fitXY"
        android:onClick="HandleClick" />
    <ImageButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/iv_yellow"
        android:layout_weight="1.0"
        android:src="@drawable/leaf_yellow"
        android:layout_gravity="fill_vertical"
        android:scaleType="fitXY"
        android:onClick="HandleClick" />
</LinearLayout>

我想要做的是,当我按下翻转按钮(这是另一个按钮)时,我想改变当前按钮的位置,我将在图片中解释:

enter image description here

好吧伙计们我在下面的帖子中使用了Arnab告诉我的想法,我想随机翻转图像按钮,所以我做了以下脚本:

        public void onClick(View v) {
          btnsLayout.removeAllViews();
            ArrayList<Integer> a = new ArrayList<Integer>();
            for(int i = 0; i < 4; i++)
            {
                a.add(i);
            }

            Collections.shuffle(a);
            btnsLayout.addView(Other, a.get(0).intValue());
            btnsLayout.addView(Green, a.get(1).intValue());
            btnsLayout.addView(Red,a.get(2).intValue());
            btnsLayout.addView(Yellow,a.get(3).intValue());
        } 

应用程序崩溃的原因是: java.lang.IndexOutOfBoundsException:index = 2 count = 1 这是什么意思 ? 谢谢!

4 个答案:

答案 0 :(得分:1)

您可以使用imgButton.setBackgroundResource();方法。

button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
           imgButton1.setBackgroundResource(R.drawable.image3);
           imgButton3.setBackgroundResource(R.drawable.image1);

        }
    });

如果要交换视图,则需要使用ViewGroup,并可以相应地设置索引。

How do I change the position of a view in a Linear Layout.?

答案 1 :(得分:1)

首先,您应该重命名ImageButtons的ID,如:

<ImageButton
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/first_leaf"
    android:layout_weight="1.0"
    android:src="@drawable/leaf_green"
    android:layout_gravity="fill_vertical"
    android:scaleType="fitXY"
    android:onClick="HandleClick" />
<ImageButton
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/second_leaf"
    android:layout_weight="1.0"
    android:src="@drawable/leaf_other"
    android:layout_gravity="fill_vertical"
    android:scaleType="fitXY"
    android:onClick="HandleClick" />
<ImageButton
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/third_leaf"
    android:layout_weight="1.0"
   .../>

然后在java类中找到你的翻转按钮并设置OnClickListener 像这样:

myFlipButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

    }
}):

然后,在onClick函数中,执行更改:

myFlipButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
         myFirstLeaf.setImageDrawable(getResources().getDrawable(R.drawable.leaf_red));
         mySecondLeaf.setImageDrawable(getResources().getDrawable(R.drawable.leaf_yellow));
         ...
        }
    });

希望它有所帮助。

答案 2 :(得分:1)

您可以在翻转按钮的onCLick(视图)中执行此操作:

// Get all the views
LinearLayout btnsLayout = (LinearLayout) findViewById(R.id.buttons_layout);
ImageButton ivGreen = (ImageButton) findViewById(R.id.iv_green);
ImageButton ivOther = (ImageButton) findViewById(R.id.iv_other);
ImageButton ivRed = (ImageButton) findViewById(R.id.iv_red);
ImageButton ivYellow = (ImageButton) findViewById(R.id.iv_yellow);

// Remove views
btnLayout.removeView(ivGreen);
btnLayout.removeView(ivRed);

// ReAdd views in new index[Index 0 = position 1, Index 2 = position 3]
btnLayout.addView(ivRed, 0);
btnLayout.addView(ivGreen, 2);

同样:

// Remove views
btnLayout.removeView(ivOther);
btnLayout.removeView(ivYellow);

// ReAdd views in new index[Index 1 = position 2, Index 3 = position 4]
btnLayout.addView(ivYellow, 1);
btnLayout.addView(ivOther, 3);

答案 3 :(得分:0)

你好使用Arnab建议和一些调整我找到了一个解决方案:问题是你需要插入索引1 2 3 4你不能随意将视图添加到线性布局。

public void addListenerOnButton() {
    Button flip = (Button) findViewById(R.id.btn_flip);
    final LinearLayout btnsLayout = (LinearLayout) findViewById(R.id.buttons_layout);
    final ImageView Other = (ImageView) findViewById(R.id.iv_other);
    final ImageView Green = (ImageView) findViewById(R.id.iv_green);
    final ImageView Red = (ImageView) findViewById(R.id.iv_red);
    final ImageView Yellow = (ImageView) findViewById(R.id.iv_yellow);
    flip.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            btnsLayout.removeAllViews();
            ArrayList<Integer> a = new ArrayList<Integer>();
            for (int i = 0; i < 4; i++) {
                a.add(i);
            }

            Collections.shuffle(a);
            for (int k = 0; k<=3 ; k++){
                if (a.get(0).intValue() == k) {
                    btnsLayout.addView(Other, a.get(0).intValue());
                }
                if (a.get(1).intValue() == k) {
                    btnsLayout.addView(Green, a.get(1).intValue());
                }
                if (a.get(2).intValue() == k) {
                    btnsLayout.addView(Red, a.get(2).intValue());
                }
                if (a.get(3).intValue() == k) {
                    btnsLayout.addView(Yellow, a.get(3).intValue());
                }
            }
        }
相关问题