我正在尝试使用多张点击时翻转的卡片进行活动。
我有一个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方法的开头。
答案 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方法的开头。