Dưới đây là một giải pháp làm việc để vượt qua phai giữa 2 bố trí:
public class CrossFadeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.crossfade);
final View l1 = findViewById(R.id.l1);
final View l2 = findViewById(R.id.l2);
final Animation fadeOut = AnimationUtils.loadAnimation(CrossFadeActivity.this, R.anim.fade_out);
final Animation fadeIn = AnimationUtils.loadAnimation(CrossFadeActivity.this, R.anim.fade_in);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
fadeOut.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
l1.setVisibility(View.GONE);
}
});
l1.startAnimation(fadeOut);
l2.setVisibility(View.VISIBLE);
l2.startAnimation(fadeIn);
}
});
findViewById(R.id.button2).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
fadeOut.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
l2.setVisibility(View.GONE);
}
});
l2.startAnimation(fadeOut);
l1.setVisibility(View.VISIBLE);
l1.startAnimation(fadeIn);
}
});
}
}
crossfade.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/l1"
android:layout_width="fill_parent"
android:layout_height="300dip"
android:orientation="vertical"
android:background="@drawable/someimage"
>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
<RelativeLayout
android:id="@+id/l2"
android:layout_width="fill_parent"
android:layout_height="300dip"
android:orientation="vertical"
android:background="@drawable/someimage2"
android:visibility="gone"
>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:layout_centerInParent="true"
/>
</RelativeLayout>
</RelativeLayout>
đâu L1 và L2 là 2 ví dụ bố trí ngẫu nhiên. Bí quyết là đặt chúng trong XML sao cho chúng chồng lấp nhau (ví dụ: trong RelativeLayout) có thể nhìn thấy/biến mất, thêm người nghe vào hoạt ảnh để chuyển đổi chế độ hiển thị khi kết thúc và đặt chế độ xem phải mờ dần để hiển thị trước hoạt ảnh bắt đầu, nếu không hoạt ảnh sẽ không hiển thị.
Tôi đặt các nút với trình nghe để tự động chuyển đổi hoạt ảnh trong bố cục, vì tôi cần triển khai theo cách đó nhưng trình nghe nhấp có thể là khóa học khác (nếu chỉ có một người dùng nên kết hợp với một số cờ hoặc kiểm tra để biết cách chuyển đổi).
Đây là các tệp hoạt ảnh. Họ phải được lưu trữ trong thư mục res/anim:
fade_in.xml
<?xml version="1.0" encoding="UTF-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fillAfter="true"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
fade_out.xml
<?xml version="1.0" encoding="UTF-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fillAfter="true"
android:fromAlpha="1.0"
android:toAlpha="0" />
UPDATE:
Thay vì sử dụng R.anim.fade_in, bạn có thể sử dụng fade_in mặc định từ API Android (android.R.fade_in):
final Animation fadeIn = AnimationUtils.loadAnimation(CrossFadeActivity.this, android.R.anim.fade_in);
Sử dụng android.R.anim.fade_in, bạn sẽ không cần tạo tệp res/anim/fade_in.xml.
Android có gói có một số hoạt ảnh hữu ích trên android.R.anim: http://developer.android.com/reference/android/R.anim.html
Tôi muốn sử dụng android.R.anim.fade_in và fade_out và tôi đã đọc điều gì đó về phương pháp ghi đèPendingTransiction. Nhưng tôi không hiểu làm thế nào thiết lập hình ảnh động để LinearLayout. Bạn có thể giúp tôi được không? – CeccoCQ
Hướng dẫn bao gồm anim.fade_in và fade_out, nếu bạn cuộn xuống abit, bạn có thể xem mã ví dụ! Điều này sẽ giúp bạn đi tôi nghĩ. – Citroenfris