Bir parçadan diğerine geçerken bir 3D Cube döndürme efekti oluşturmaya çalışıyorum. İlk önce, FragmentTransaction.setCustomAnimations(...)
numaralı çağrıyla bir çeviri efekti (XML'de) kullanıyordum ve daha sonra parçayı açarken/kapatırken, döndürmeyi yapmak için Camera classe ile oynuyordum.Android - Aynı XML dosyasında çeviriler ve objectAnimator oluşturma
Bu FINE üzerinde çalışıyordu, ancak sadece XML dosyası kullanarak bu animasyonu kullanmam için bana neden sormadım. Uzun bir aradan sonra rotasyon yapmak için objectAnimator kullanmam gerektiğini öğrendim.
Google örneğini takip ettim ve çevirme animasyonu yapmayı başardım. Şimdi, parçaları sürükleyerek ve kaydırarak parçalara çevirmem gerekiyor. Aynı XML dosyasında objectAnimator ve çeviri efektini kullanamayacağımı görünüyor. Bu hata görünür beri i kayma etkisini yapmak ve aynı zamanda üzerinde objectAnimator nasıl kullanabileceği üzerinde
java.lang.RuntimeException: Unknown animator name: translate at (...)
Herhangi bir fikir?
Zaman ayırdığınız için teşekkür ederiz!
Kod i kullanıyorum:
private void launchArticle(int prev, int pos){
ArticleFragment newFragment = new ArticleFragment();
Bundle args = new Bundle();
args.putString("pos", pos);
args.putInt("prev", prev);
newFragment.setArguments(args);
android.app.FragmentTransaction transaction = getFragmentManager().beginTransaction();
Fragment currFrag = (Fragment)getFragmentManager().findFragmentById(R.id.headlines_fragment);
if (currFrag != null) {
transaction.hide(currFrag);
}
transaction.setCustomAnimations(
R.animator.card_flip_right_in,
R.animator.card_flip_right_out,
R.animator.card_flip_left_in,
R.animator.card_flip_left_out
);
transaction.replace(R.id.fragment_container, newFragment, pos);
transaction.addToBackStack(null);
transaction.commit();
}
(küp dönme bu 2 arasında görünür olmalıdır):
card_flip_right_in.xml bir fragmanını çağrı
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Before rotating, immediately set the alpha to 0. -->
<objectAnimator
android:duration="0"
android:propertyName="alpha"
android:valueFrom="1.0"
android:valueTo="0.0" />
<!-- Rotate. -->
<objectAnimator
android:duration="@integer/card_flip_time_full"
android:interpolator="@android:interpolator/accelerate_decelerate"
android:propertyName="rotationY"
android:valueFrom="180"
android:valueTo="0" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 1. -->
<objectAnimator
android:duration="1"
android:propertyName="alpha"
android:startOffset="@integer/card_flip_time_half"
android:valueFrom="0.0"
android:valueTo="1.0" />
</set>
Fragman
UPDATE:
Ben
SlidingFrameLayout.java
public class SlidingFrameLayout extends FrameLayout
{
private static final String TAG = SlidingFrameLayout.class.getName();
public SlidingFrameLayout(Context context) {
super(context);
}
public SlidingFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public float getXFraction()
{
final int width = getWidth();
if(width != 0) return getX()/getWidth();
else return getX();
}
public void setXFraction(float xFraction) {
final int width = getWidth();
setX((width > 0) ? (xFraction * width) : -9999);
}
public float getYFraction()
{
final int height = getHeight();
if(height != 0) return getY()/getHeight(); else return getY();
}
public void setYFraction(float yFraction) {
final int height = getHeight();
setY((height > 0) ? (yFraction * height) : -9999);
}
}
kullanıyorum parçaların benim framelayout genişleten bir sınıf kullanarak önceki sorunun çözümü için yönetmek ve objectAnimator bu ekleyerek ettik Bu daha iyi çalışıyor, ancak rottation eksenleri FrameLayout ortasında vardır ve maki değil
<!-- Move -->
<objectAnimator
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@integer/card_flip_time_full"
android:interpolator="@android:anim/linear_interpolator"
android:propertyName="xFraction"
android:valueFrom="-1"
android:valueTo="0" />
Bir küpün yanılsamasını ... Döndürme eksenlerini belirli bir noktaya ayarlamak mümkün mü?
Benim durumumda FrameLayout yerine parçaların kök görünümünde ekstra yöntemler (getXFraction, setXFraction ...) vardı, ama sonuç aynıdır .. Teşekkürler – codeskraps
@codeskraps fragmanların kök görünümünde ekstra yöntemler eklendi? Bir parçayı kaydırmak istiyorum ve bunu yapmak için genişletilmiş FrameLayout kullanıyorum. Çalışıyor ama bazı sorunları var. Bunu yapmanın daha iyi bir yolunu arıyorum. – crubio