6

Tôi đang cố gắng triển khai giao dịch phân đoạn với thao tác trượt trong/ra. Tôi đang phát triển tối thiểu 14 sdk để ObjectAnimator là lựa chọn duy nhất cho tôi (có cách nào khác không? dịch hoạt ảnh không khả dụng khi tôi hiểu).FragmentTransacation với slide in/out hoạt hình trên> 4 hiệu suất

Bộ luật rất đơn giản:

AnimationView.java - lớp wrapper

public class AnimationView extends LinearLayout { 

public AnimationView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 


public float getYFraction() { 
    return getHeight(); 
} 

public void setYFraction(float yFraction) { 
    final int height = this.getHeight(); 
    setY((height > 0) ? (yFraction * height) : -9999); 
} 
} 

slide trong & ra xml của

<?xml version="1.0" encoding="utf-8"?> 
<set> 
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" 
       android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
       android:propertyName="yFraction" 
       android:valueType="floatType" 
       android:valueFrom="-1" 
       android:valueTo="0" 
       android:duration="600"/> 

<?xml version="1.0" encoding="utf-8"?> 
<set> 
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" 
       android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
       android:propertyName="yFraction" 
       android:valueType="floatType" 
       android:valueFrom="0" 
       android:valueTo="1" 
       android:duration="600"/> 

Ảnh động làm việc hoàn hảo, như bạn có thể thấy tôi đã sử dụng tài sản yFraction tùy chỉnh. Nhưng hiệu suất rất xấu ... trong một số máy tính bảng tôi nhận thấy một đường trắng ngang (khoảng 3 px chiều cao) trong khi hoạt hình, trong thiết bị điện thoại thông minh khác nó đã đi chỉ để làm chậm (không phải thời gian chậm nhưng nhấp nháy).

Tôi tìm thấy một cách để sửa chữa nó nếu tôi đặt valueFrom & valueTo để phù hợp với kích thước xem, nhưng nó không phải chung chung và cần phải được 0-1 là chung cho tất cả các quan điểm

sẽ đánh giá cao nếu một số có thể giúp tôi hoặc cho tôi biết nếu có cách khác để triển khai trên Android 14 trở lên.

Cảm ơn.

Trả lời

-4

Hãy thử cách này:

if (mLastMenuWeight > mMenuWeight) { 
transaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
}else{transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left);} 
Các vấn đề liên quan