Tôi muốn sử dụng Chuyển đổi hoạt động mới của Android Lollipop. Nhưng hiện tại tôi đang nhìn thấy những con quái vật rất lạ trong các hình động. Tôi đã tấn công với nhau những mẫu nhỏ nhất mà tôi có thể nghĩ đến.Trục trặc trong quá trình chuyển đổi hoạt động với các thành phần được chia sẻ
Đây là những gì tôi đã làm trong một phiên bản rất ngắn:
- Bật hiệu ứng chuyển tiếp nội dung cửa sổ trong tôi
styles.xml
- Được tham chiếu rất đơn giản
slide.xml
như chuyển cảnh trong phong cách của tôi - Cung cấp một
android:transitionName
cho một phần tử được chia sẻ trong cả hai bố cục - Được gọi là
ActivityOptions.makeSceneTransitionAnimation()
với tên đó và chế độ xem tôi muốn chia sẻ - Pa ssed bó dẫn đến
startActivity()
Đây là hành vi tôi thấy (thử 10x tốc độ hình ảnh động chậm hơn để xem những gì tôi có nghĩa): Ngay trước khi các hình ảnh động trượt trượt xuống các quan điểm mà không được chia sẻ, những quan điểm nhảy xuống một chút. Họ thực sự di chuyển một chút ngoài.
Nhưng: Điều này chỉ xảy ra trong thời gian giây thứ hai khi tôi chạy hoạt ảnh đó (và mỗi lần sau đó). Vượt qua đầu tiên có vẻ tốt. Và điều này cũng chỉ xảy ra nếu tôi muốn chia sẻ một yếu tố với hoạt động tiếp theo. Tất cả mọi thứ hoạt động tốt nếu tôi không cố gắng chia sẻ một yếu tố.
Đây là mã của tôi:
giá trị/styles.xml
<resources>
<style name="AppTheme" parent="android:Theme.Material.Light">
<!-- enable window content transitions -->
<item name="android:windowContentTransitions">true</item>
<!-- specify exit transition -->
<item name="android:windowExitTransition">@transition/slide</item>
</style>
</resources>
chuyển/slide.xml
<slide />
Layout cho hoạt động chính
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#0000ff" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#00ff00" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#0000ff" />
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#00ff00" />
</LinearLayout>
<!-- the actual element I want to share -->
<View
android:id="@+id/view"
android:layout_width="56dp"
android:layout_height="56dp"
android:background="#ff0000"
android:elevation="8dp"
android:transitionName="view" />
</RelativeLayout>
MainActivity.java
public class MainActivity extends Activity implements View.OnClickListener {
View mView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mView = findViewById(R.id.view);
mView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, mView, "view");
Intent intent = new Intent(this, SecondaryActivity.class);
startActivity(intent, options.toBundle());
}
}
Mã bạn sử dụng cho quá trình chuyển đổi phần tử được chia sẻ ở đâu? Tôi thấy rằng bạn đã chỉ định một 'windowExitTransition' trong kiểu của bạn, nhưng làm thế nào bạn thiết lập' windowSharedElementExitTransition'? Ngoài ra, mã bố cục hoạt động thứ hai của bạn trông như thế nào? –
Ngoài ra, liệu hành vi tương tự có xảy ra nếu bạn cung cấp cho các chế độ xem không được chia sẻ của bạn được cố định chiều cao (thay vì đặt 'layout_weight =" 1 "' cho mỗi chế độ xem trong bố cục hoạt động đầu tiên của bạn XML? –
Chúng tôi không chỉ định tùy chỉnh 'windowSharedElementExitTransition' Do đó, chúng tôi đang sử dụng các chủ đề mặc định. Các yếu tố được chia sẻ đã có kích thước cố định ở cả hai bố cục – Greeny