Search code examples
androidandroid-animationtranslate-animation

How can I set "toXDelta" translate animation value from java code?


how can I set toXDelta value from java code? I need to calculate it first so I can't just use final value in xml. I could use animate().translateX on my view but then I can't make animation slowing down till the end.. any ideas?


Solution

  • You can use Viewfiliper Method. Refrence is : ViewFlipper | Android Developers

    There is an example in this.(Android ViewFlipper Example)

    And you make a custum animation in your code(See res/anim Folder)

    This is example code:

    The MainActivity.java code:

    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 file:

    <?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>
    

    All of bellow code is into the res/anim directory:

    slide_in_from_left.xml (see into the screen):

    <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 (see out of screen):

      <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 (see into the screen):

     <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 (see out of screen):

       <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>