View,Viewgroup,onClick,getChildAt问题

时间:2019-03-22 09:09:31

标签: java android

我正在尝试使用多张点击时翻转的卡片进行活动。

我有一个Framelayout(卡片),其中还有两个其他Framelayouts(卡片的两面),

<FrameLayout
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:layout_margin="5dp"
    android:layout_columnWeight="1"
    android:layout_rowWeight="1"
    android:onClick="flipCard">

    <FrameLayout
        android:id="@+id/card_back1"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <include layout="@layout/card_back" />

    </FrameLayout>

    <FrameLayout
        android:id="@+id/card_front1"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

         <include layout="@layout/card_front" />

    </FrameLayout>
</FrameLayout>

我有一个“ flipCard”方法,应该启动对象动画并将其目标设置为两个帧布局(卡的侧面)。

但是,partent framelayout(卡)是通过onclick调用“ flipcard”方法的视图,但是在“ flipcard”方法中,我需要将目标设置为子视图。我曾考虑为此使用.getChildAt()方法,但无法使其工作。

flipCard方法:

public void flipCard(View view) {
    if (!mIsBackVisible) {
        mSetRightOut.setTarget(view.getChildAt(1));
        mSetLeftIn.setTarget(view.getChildAt(0));
        mSetRightOut.start();
        mSetLeftIn.start();
        mIsBackVisible = true;
    } else {
        mSetRightOut.setTarget(view.getChildAt(0));
        mSetLeftIn.setTarget(view.getChildAt(1));
        mSetRightOut.start();
        mSetLeftIn.start();
        mIsBackVisible = false;
    }
}

如果将flipCard方法更改为“ flipCard(ViewGroup Viewgroup),则该方法无效,因为xml中的onClick正在寻找采用View而不是ViewGroup的方法。

我需要将onClick设置在父Framelayout上,但是我需要以某种方式获取子FrameLayout。

如何使我的原始想法生效,或者如果不可行,我应该尝试其他解决方案吗?

编辑:解决方案非常简单,只需放入“ ViewGroup viewGroup =(ViewGroup)视图;”在flipCard方法的开头。

2 个答案:

答案 0 :(得分:0)

  

使用下面的代码将可以正常工作,我已经用颜色显示了   必须把你的颜色

layout.xml

 <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

    <FrameLayout
        android:id="@+id/llOne"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="@color/colorGrey"
        android:duplicateParentState="true"
        android:orientation="vertical"
        android:visibility="gone" />

    <FrameLayout
        android:id="@+id/llTwo"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="@color/colorAccent"
        android:duplicateParentState="true"
        android:orientation="horizontal" />
</FrameLayout>
  

Demo.Java

 public class demo extends AppCompatActivity {

private FrameLayout llOne, llTwo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_demo);
    initBasic();
}

private void initBasic() {
    llOne = findViewById(R.id.llOne);
    llTwo = findViewById(R.id.llTwo);
    llOne.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            llOne.setVisibility(View.GONE);
            llTwo.setVisibility(View.VISIBLE);
        }
    });
    llTwo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            llOne.setVisibility(View.VISIBLE);
            llTwo.setVisibility(View.GONE);
        }
    });
}

}

答案 1 :(得分:0)

解决方案非常简单,只需放入“ ViewGroup viewGroup =(ViewGroup)视图;”在flipCard方法的开头。