我在LinearLayout中有3个视图对象(实质上是ImageView),而LinearLayout又在RelativeLayout中,视图在LinearLayout中对齐如下:
1 - 2 - 3 - -
3个视图包含在线性布局下,如上所示。
基本上我的想法是让侧视图(第1和第3个视图)随动画一起移动到中间视图onClick()的位置。 (因此,如果单击第3个视图,它应该移动到中间视图的位置,中间移动到第3个视图的位置。)
我实现了翻译动画,使得第三个视图在点击100dp到左边和第二个视图时向右移动,很好,但是当我在第一个视图的onClick()上应用翻译动画使其移动到右边和第二个向左移动然后第二个和第三个视图都集体移动!! ,这意味着Android会自动将视图相互映射!!(注意:这就是为什么我使用LinearLayout以便不会出现对齐问题,例如第2个视图是align_below第1个视图和第3个视图问题的aligned_left。)< / p>
另一个问题是,尽管视图使移动落在另一个位置上,该位置最初属于动画运动之前的另一个视图,但它们仍然保持原始视图ID? For.Example,当第三个视图向左移动到第二个视图位置,第二个mvoes移动到第三个视图时,onClick()仍然被映射到它们的原始位置?
XML文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
</LinearLayout>
<RelativeLayout
android:id="@+id/Container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#138AF8" >
<RelativeLayout
android:id="@+id/RelativeLayout01"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:background="#138AF8" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:orientation="horizontal" >
<ImageView
android:id="@+id/ImageView01"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/cost" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/cost" />
<ImageView
android:id="@+id/ImageView02"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/cost" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
那些名为ImageView1,ImageView01,ImageView02的3个ImageView是我正在尝试动画的那个。
动画代码:
final TranslateAnimation moveLefttoRight = new TranslateAnimation(0,
100, 0, 0);
final TranslateAnimation moveRightToLeft = new TranslateAnimation(0,
-100, 0, 0);
moveRightToLeft.setDuration(1000);
moveLefttoRight.setDuration(1000);
moveRightToLeft.setFillAfter(true);
moveLefttoRight.setFillAfter(true);
final ImageView image1 = (ImageView) findViewById(R.id.imageView1);
final ImageView image2 = (ImageView) findViewById(R.id.ImageView01);
final ImageView image3 = (ImageView) findViewById(R.id.ImageView02);
image1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
Toast.makeText(getApplicationContext(), "image1 clicked",
Toast.LENGTH_SHORT).show();
}
});
image2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
Toast.makeText(getApplicationContext(), "image2 clicked",
Toast.LENGTH_SHORT).show();
image2.startAnimation(moveLefttoRight);
image1.startAnimation(moveRightToLeft);
}
});
image3.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
Toast.makeText(getApplicationContext(), "image3 clicked",
Toast.LENGTH_SHORT).show();
image2.startAnimation(moveLefttoRight);
image3.startAnimation(moveRightToLeft);
}
});
答案 0 :(得分:1)
翻译动画实际上并不会移动视图,只是让它看起来像那样。你必须在动画结束之前设置参数,以便按钮移动。example
另一个问题是你可以发布你的xml布局文件吗?你在图像视图中使用权重吗?
答案 1 :(得分:0)
我最终使用内置动画API的ObjectAnimator,这将视图的位置永久移动到合作伙伴。请求。