2015-12-04 7 views
0

Как я могу установить значение toXDelta из java-кода? Мне нужно сначала вычислить его, поэтому я не могу просто использовать конечное значение в xml. Я мог бы использовать анимацию(). TranslateX на моем представлении, но потом я не могу заставить анимацию замедляться до конца .. любые идеи?Как установить значение toXDelta для перевода значения анимации из java-кода?

ответ

1

Вы можете использовать Viewfiliper Метод. Refrence является: ViewFlipper | Android Developers

Существует пример в этом (Android ViewFlipper Example)

И вы делаете custum анимацию в коде (См RES/Anim Папка)

Это пример кода:.

MainActivity.код Java:

package com.javacodegeeks.android.viewflipperapp; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.widget.ViewFlipper; 

public class MainActivity extends Activity { 
    private ViewFlipper viewFlipper; 
    private float lastX; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     viewFlipper = (ViewFlipper) findViewById(R.id.viewflipper); 
    } 

    // Using the following method, we will handle all screen swaps. 
    public boolean onTouchEvent(MotionEvent touchevent) { 
     switch (touchevent.getAction()) { 

     case MotionEvent.ACTION_DOWN: 
      lastX = touchevent.getX(); 
      break; 
     case MotionEvent.ACTION_UP: 
      float currentX = touchevent.getX(); 

      // Handling left to right screen swap. 
      if (lastX < currentX) { 

       // If there aren't any other children, just break. 
       if (viewFlipper.getDisplayedChild() == 0) 
        break; 

       // Next screen comes in from left. 
       viewFlipper.setInAnimation(this, R.anim.slide_in_from_left); 
       // Current screen goes out from right. 
       viewFlipper.setOutAnimation(this, R.anim.slide_out_to_right); 

       // Display next screen. 
       viewFlipper.showNext(); 
      } 

      // Handling right to left screen swap. 
      if (lastX > currentX) { 

       // If there is a child (to the left), kust break. 
       if (viewFlipper.getDisplayedChild() == 1) 
        break; 

       // Next screen comes in from right. 
       viewFlipper.setInAnimation(this, R.anim.slide_in_from_right); 
       // Current screen goes out from left. 
       viewFlipper.setOutAnimation(this, R.anim.slide_out_to_left); 

       // Display previous screen. 
       viewFlipper.showPrevious(); 
      } 
      break; 
     } 
     return false; 
    } 
} 

XML файл:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
android:background="#f5f5f5" > 

     <ViewFlipper 
      android:id="@+id/viewflipper" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_margin="6dp" > 


      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="15dp" 
        android:text="Windows PC" 
        android:textColor="#b7102f" 
        android:textSize="25dp"> 
       </TextView> 

       <ImageView 
        android:layout_marginTop="15dp" 
        android:id="@+id/imageView1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/windows_pc" /> 
      </LinearLayout> 


      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:gravity="center" 
       android:orientation="vertical" > 

       <TextView 
        android:layout_marginTop="15dp" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Ubuntu PC" 
        android:textColor="#191975" 
        android:textSize="25dp" 
        android:textStyle="italic" > 
       </TextView> 

       <ImageView 
        android:layout_marginTop="15dp" 
        android:id="@+id/imageView2" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:src="@drawable/ubuntu_pc" /> 

      </LinearLayout> 
     </ViewFlipper> 
</LinearLayout> 

Все сильфона кода в Рез/Anim каталог:

slide_in_from_left.xml (см на экран):

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:fromXDelta="-100%" 
     android:toXDelta="0%" 
     android:fromYDelta="0%" 
     android:toYDelta="0%" 
     android:duration="1500" /> 
</set> 

slide_out_to_left.xml (см. Экран):

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
     <translate 
     android:fromXDelta="0%" 
     android:toXDelta="-100%" 
     android:fromYDelta="0%" 
     android:toYDelta="0%" 
     android:duration="1500"/> 
</set> 

slide_in_from_right.xml (см в экран):

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:fromXDelta="100%" 
     android:toXDelta="0%" 
     android:fromYDelta="0%" 
     android:toYDelta="0%" 
     android:duration="1500" /> 
</set> 

slide_out_to_right.xml (см из экрана):

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
     <translate 
      android:fromXDelta="0%" 
      android:toXDelta="100%" 
      android:fromYDelta="0%" 
      android:toYDelta="0%" 
      android:duration="1500"/> 
</set> 
0

Скачать nineolddroids (http://nineoldandroids.com/) библиотека и читать документы ...

вы должны быть в состоянии получить вещь сделана с помощью либо x или xBy методы.

Пример использования:

private void sortCardsAndShadowAnim() { 
//  float bottom = getHeight(); 
    float activeCardTop; 
    if (activeCardIndex == getChildCount() - 1) { 
     activeCardTop = topHeaderDown; 
     ViewPropertyAnimator.animate(getChildAt(activeCardIndex)).y(activeCardTop).setDuration(SORT_ANIMATION_DURATION).start(); 
     ViewPropertyAnimator.animate(shadows.get(activeCardIndex)).alpha(getShadowAlpha(activeCardTop)).setDuration(SORT_ANIMATION_DURATION).start(); 
    } else { 
     for (int i = getChildCount() - 1; i > activeCardIndex + 1; i--) { 
      ViewPropertyAnimator.animate(getChildAt(i)).y(bottom).setDuration(SORT_ANIMATION_DURATION).start(); 
      ViewPropertyAnimator.animate(shadows.get(i)).alpha(getShadowAlpha(bottom)).setDuration(SORT_ANIMATION_DURATION).start(); 
     } 

этот код на самом деле движется Просмотров (карты) с помощью Y-оси, а также угасание его, как он движется.

1

В анимации перевода вы можете отправить это значение при создании объекта.

TranslateAnimation trans = new TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta); 

вы читали здесь ::

общественного TranslateAnimation (поплавок fromXDelta, плавать toXDelta, плавать fromYDelta, плавать toYDelta)

Добавлено в уровне API 1 Конструктор использовать при строительстве ПеревестиОписание от кода

Параметры

fromXDelta Изменение координаты Х применять в начале анимации

toXDelta Изменение в X координат для применения в конце анимации

fromYDelta Изменение в Y координат, чтобы применить в начале анимации

toYDelta Изменение Y координат для применения в конце анимации

Я надеюсь, что это ваш Requirment

+0

@curousi имеют LinearLayout с 3 вес суммы. внутри linearlayout У меня есть один относительный макет с весом 1. Поэтому, когда я одушевляю кнопку из относительной компоновки, ее перемещение происходит только с относительной компоновкой, но я хочу анимировать до основного linearlayout, вы знаете какие-либо решения для этого? – PriyankaChauhan

+0

@PriyankaChauhan Можете ли вы показать мне свой дизайн? – curiousMind

+0

https://paste.ofcode.org/fDQM9abnkyG7uTcPkcAPi4 – PriyankaChauhan