10

Trong ứng dụng của tôi, tôi muốn lật chế độ xem .. Tôi đã xem hoạt ảnh như vậy trong iPhone. Và điều tương tự tôi muốn vào ứng dụng Android của tôi.Android: Làm cách nào để tạo hoạt ảnh lật cho hoạt động trên Android, như lật iphone ngang từ trái sang phải?

Tôi muốn lật toàn bộ chế độ xem hoạt động. là nó có thể? Tôi đã thấy một số ví dụ cho việc lật trong android. Nhưng trong tất cả ví dụ đó, chế độ xem nằm trong cùng một hoạt động. Có thể đặt chế độ xem đó cho hoạt động khác không. hoặc để làm như vậy có hiệu lực trong khi đi từ một hoạt động khác?

Xin vui lòng xem các snap cho hiệu ứng lật trong iPhone:

enter image description here

Nếu có thì xin vui lòng cho tham chiếu đến bất kỳ ví dụ demo hoặc mã. Cảm ơn.

+0

tìm android.R.anim trong resp. sdk phiên bản thư mục bạn có thể tìm thấy một số ví dụ. –

Trả lời

5

Trước hết hãy xác định hoạt ảnh của riêng bạn và lưu trữ hình ảnh đó dưới dạng XML dưới dạng hoạt ảnh hoặc lớp java. Tôi không có bất kỳ ví dụ làm việc nào khác ngoài API Demo đi kèm với tải xuống SDK trong Eclipse, nếu bạn đang tìm kiếm hoạt ảnh lật, hãy thử xem lớp Chuyển tiếp 3D.

Sau khi có hoạt động của bạn để tải hoạt ảnh đó, tốt nhất nên tải nó vào onCreate. Vui lòng tham khảo question

4

Một trong những hình động lật 3D thuyết phục nhất cho Android mà tôi đã xem được thực hiện tại đây https://code.google.com/p/android-3d-flip-view-transition.

Rất nhiều hướng dẫn và mã mẫu khác không tạo ra hiệu ứng 3D nổi bật. Một vòng quay đơn giản trên trục y không phải là những gì được thực hiện trong iOS.

Ngoài ra còn có một đoạn video ở đây: http://youtu.be/52mXHqX9f3Y

4

Bạn có thể làm một rất giống với những tập tin xml.

rotate_out.xml

<?xml version="1.0" encoding="utf-8"?> 

<scale 
    android:duration="300" 
    android:fromXScale="1.0" 
    android:fromYScale="1.0" 
    android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:toXScale="0.0" 
    android:toYScale="0.90" /> 

<alpha 
    android:duration="1" 
    android:fromAlpha="1.0" 
    android:startOffset="500" 
    android:toAlpha="0.0" /> 

rotate_in.xml

<?xml version="1.0" encoding="utf-8"?> 

<scale 
    android:duration="200" 
    android:fromXScale="0.0" 
    android:fromYScale="0.90" 
    android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:startOffset="500" 
    android:toXScale="1.0" 
    android:toYScale="1.0" /> 

<alpha 
    android:duration="1" 
    android:fromAlpha="0.0" 
    android:startOffset="500" 
    android:toAlpha="1.0" /> 

Sau đó, trong quá trình chuyển đổi của bạn đang ghi đè sau khi startActivity() hoặc kết thúc():

overridePendingTransition(R.anim.rotate_in, R.anim.rotate_out); 
+0

đây là xoay, không lật – Boy

+0

@Boy, có lẽ nó là một quy mô, không xoay, Nhưng có vẻ như một flip. – CoolMind

+0

Điều đáng buồn này không giống nhau chút nào: https://ibb.co/jBaE6Q – matheszabi

1

Tại iOS chân dung: Rotation to middle ios

"Rất nhiều người kia các hướng dẫn và mã mẫu không tạo ra các đoạn 3D đáng tin cậy. Xoay vòng đơn giản trên trục y không phải là những gì được thực hiện trong iOS. " Sau gần 30h tìm mẫu, tôi phải đồng ý. Tôi có một bộ phim, nơi tôi có thể chụp ảnh màn hình ở giữa. Phía bên phải của chế độ xem có: - chuyển động sang trái và thu nhỏ tới 95%. Phía bên trái của chế độ xem có: - chuyển động sang bên phải VÀ thu nhỏ tới 80%.

Tại Android Full (trạng thái ban đầu): android initial

giữa Android: android middle

mã Android:

// @param interpolatedTime The value of the normalized time (0.0 to 1.0) 
// @param t The Transformation object to fill in with the current transforms. 
protected void applyTransformation(float interpolatedTime, Transformation t){ 

    float degrees = toDegree*interpolatedTime; 
    //float rad = (float) (degrees * Math.PI/180.0f); 

    Matrix matrix = t.getMatrix(); 
    camera.save(); 

    camera.rotateY(degrees); 
    camera.getMatrix(matrix); 
    camera.restore(); 

    matrix.preTranslate(-centerX, -centerY);// M' = M * T(dx, dy) 
    matrix.postTranslate(centerX, centerY); // M' = T(dx, dy) * M 
} 

Một phiên bản cải tiến của các mã có thể được tìm thấy trong hầu hết các ví dụ :

// @param interpolatedTime The value of the normalized time (0.0 to 1.0) 
    // @param t The Transformation object to fill in with the current transforms. 
    protected void applyTransformation(float interpolatedTime, Transformation t){ 

     float degrees = toDegree*interpolatedTime; 
     //float rad = (float) (degrees * Math.PI/180.0f); 

     Matrix matrix = t.getMatrix(); 
     camera.save(); 

     camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime); 
     camera.rotateY(degrees); 

     camera.getMatrix(matrix); 
     camera.restore(); 

     matrix.preTranslate(-centerX, -centerY);// M' = M * T(dx, dy) 
     matrix.postTranslate(centerX, centerY); // M' = T(dx, dy) * M 
    } 

improved android

Một số khác biệt là: - phía bên phải của chế độ xem không di chuyển như cách iOS.

Dưới đây là các trục máy ảnh Android: axes

tôi tin rằng một traslation trên trục Z không sửa chữa nó. Có lẽ cần một sự co lại quá bằng cách nào đó.

float dz = (float) (centerX * Math.sin(rad)); 
camera.translate(0f, 0f, -dz); 

Vẫn chưa đủ. Để nhiều là thu nhỏ phía bên trái.

z

Các vấn đề liên quan