我正在尝试互换两个文本视图(它们采用不同的线性布局)。
我的要求与下面链接中提到的那个很相似,
Animation: Move TextView into another container
我使用了“nineoldandroids”库的ObjectAnimator,但是当它移动到其他布局时,textview正在消失。
有人可以帮我解决这个问题。提前谢谢。
更新1: -
现在我使用了“nineoldandroids”库的PropertyValuesHolder来执行翻译动画。在使用PropertyValuesHolder之后,在完成动画之后,textview是可见的(即,不会消失)。但动画后onclick功能无效。
此外,我还在动画后放置了Toast消息以检查Textviews的X维度。
然后我得到以下显示: - 在动画之前: - 对于第一行的textview&第一列(即tv11): - 0.0 for textview at second row&第二列(即tv22): - 0.0
动画后: - 对于第一行的textview&第一列(即tv11): - 240.0 for textview at second row&第二栏(即tv22): - -240.0
无论如何,要将这些文本视图作为其他布局的子项(移动到它们的位置)。
请找到相同的以下代码: -
MainActivity.java: -
findViewById(R.id.tv22).setOnClickListener( new View.OnClickListener() {
public void onClick(View v) {
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", +240);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", +380);
ObjectAnimator.ofPropertyValuesHolder(findViewById(R.id.tv11), pvhX, pvhY).setDuration(2000).start();
PropertyValuesHolder pvhX2 = PropertyValuesHolder.ofFloat("x", -240);
PropertyValuesHolder pvhY2 = PropertyValuesHolder.ofFloat("y", -380);
ObjectAnimator.ofPropertyValuesHolder(findViewById(R.id.tv22), pvhX2, pvhY2).setDuration(2000).start();
Toast.makeText(MainActivity.this, ((TextView)findViewById(R.id.tv11)).getX()+"tv11", Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, ((TextView)findViewById(R.id.tv22)).getX()+"tv22", Toast.LENGTH_SHORT).show();
}
});
activity_main.xml中: -
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"
android:orientation="vertical"
tools:context=".MainActivity" >
<View
android:layout_width="match_parent"
android:layout_height="1dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:clipChildren="false"
android:orientation="horizontal" >
<View
android:layout_width="1dp"
android:layout_height="match_parent" />
<TextView
android:id="@+id/tv11"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#4374E0" />
<View
android:layout_width="1dp"
android:layout_height="match_parent" />
<TextView
android:id="@+id/tv13"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#4374E0" />
<View
android:layout_width="1dp"
android:layout_height="match_parent" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:clipChildren="false"
android:orientation="horizontal" >
<View
android:layout_width="1dp"
android:layout_height="match_parent" />
<TextView
android:id="@+id/tv21"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#4374E0" />
<View
android:layout_width="1dp"
android:layout_height="match_parent" />
<TextView
android:id="@+id/tv22"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#4374E0" />
<View
android:layout_width="1dp"
android:layout_height="match_parent" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp" />
</LinearLayout>
更新2: -
即使执行了以下更改,onclick也无法正常工作。有人可以帮助我。
findViewById(R.id.tv22).setOnClickListener( new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(MainActivity.this, ((TextView)findViewById(R.id.tv11)).getX()+"tv11"+((TextView)findViewById(R.id.tv22)).getX()+"tv22", Toast.LENGTH_SHORT).show();
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", +240);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", +380);
final ObjectAnimator changeIn = ObjectAnimator.ofPropertyValuesHolder(findViewById(R.id.tv11), pvhX, pvhY).setDuration(2000);
changeIn.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator anim) {
view.setScaleX(1f);
view.setScaleY(1f);*/
TextView testtv1= (TextView)findViewById(R.id.tv11);
TextView testtv2= (TextView)findViewById(R.id.tv22);
testtv1.clearAnimation();
testtv2.clearAnimation();
View v1= container1.getChildAt(1);
View v2= container2.getChildAt(3);
Log.i("childcount1 before",container1.getChildCount()+"");
container1.removeView(v1);
Log.i("childcount1 after",container1.getChildCount()+"");
Log.i("childcount2 before",container2.getChildCount()+"");
container2.removeView(v2);
Log.i("childcount2 after",container2.getChildCount()+"");
Log.i("check1","Removed Successfully");
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(0,0);
container1.addView(v2, 1,lp);
container2.addView(v1, 3,lp);
Toast.makeText(MainActivity.this, ((TextView)findViewById(R.id.tv11)).getX()+"tv11"+((TextView)findViewById(R.id.tv22)).getX()+"tv22", Toast.LENGTH_SHORT).show();
}
});
changeIn.start();
PropertyValuesHolder pvhX2 = PropertyValuesHolder.ofFloat("x", -240);
PropertyValuesHolder pvhY2 = PropertyValuesHolder.ofFloat("y", -380);
ObjectAnimator.ofPropertyValuesHolder(findViewById(R.id.tv22), pvhX2, pvhY2).setDuration(2000).start();
}
});