How to slide an ImageView from left to right smoothly in Android?

前端 未结 7 1652
小鲜肉
小鲜肉 2021-02-01 21:37

I need to make an ImageView slide from left to right of the screen with a smooth animation (I want the ImageView to be visible during the transition) I

相关标签:
7条回答
  • 2021-02-01 21:38
    public class MainActivity extends Activity {
    
           int windowwidth;
           int windowheight;
    
           private LayoutParams layoutParams;
    
           @Override
           public void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.activity_main);
    
                  windowwidth = getWindowManager().getDefaultDisplay().getWidth();
                  windowheight = getWindowManager().getDefaultDisplay().getHeight();
                  final ImageView img = (ImageView) findViewById(R.id.imageView1);
    
                  img.setOnTouchListener(new View.OnTouchListener() {
    
                         @Override
                         public boolean onTouch(View v, MotionEvent event) {
                               LayoutParams layoutParams = (LayoutParams) img
                                             .getLayoutParams();
                               switch (event.getAction()) {
                               case MotionEvent.ACTION_DOWN:
                                      break;
                               case MotionEvent.ACTION_MOVE:
                                      int x_cord = (int) event.getRawX();
                                      int y_cord = (int) event.getRawY();
    
                                      if (x_cord > windowwidth) {
                                             x_cord = windowwidth;
                                      }
                                      if (y_cord > windowheight) {
                                             y_cord = windowheight;
                                      }
    
                                      layoutParams.leftMargin = x_cord - 25;
                                      layoutParams.topMargin = y_cord - 75;
    
                                      img.setLayoutParams(layoutParams);
                                      break;
                               default:
                                      break;
                               }
                               return true;
                         }
                  });
           }
    }
    
    0 讨论(0)
  • 2021-02-01 21:45
    TranslateAnimation animate = new TranslateAnimation(0, -view.getWidth(), 0, 0);
    animate.setDuration(500);
    animate.setFillAfter(true);
    view.startAnimation(animate);
    
    0 讨论(0)
  • 2021-02-01 21:52

    To Move imageview

    from Right to Left Using @Aritra Roy Answer.

    Use this code

    <?xml version="1.0" encoding="utf-8"?>
    <set
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/linear_interpolator"
        android:fillAfter="true">
    
        <translate
            android:fromXDelta="75%p"
            android:toXDelta="0%p"
            android:duration="100000" />
    </set>
    
    0 讨论(0)
  • 2021-02-01 21:55

    Hope this works for u

    animation.xml

        <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".Animation" >
    
        <ImageView
            android:id="@+id/img_animation"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="30dp"
            android:layout_marginTop="42dp"
            android:src="@drawable/emo_im_laughing" />
    
    </RelativeLayout>
    

    Animation.java

    import android.os.Bundle;
    import android.app.Activity;
    import android.view.animation.TranslateAnimation;
    import android.widget.ImageView;
    
    public class Animation extends Activity {
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.);
    
      ImageView img_animation = (ImageView) findViewById(R.id.img_animation);
    
      TranslateAnimation animation = new TranslateAnimation(0.0f, 400.0f,
        0.0f, 0.0f);
      animation.setDuration(5000);
      animation.setRepeatCount(5);
      animation.setRepeatMode(2);
      animation.setFillAfter(true);
      img_animation.startAnimation(animation);
    
     }
    }
    
    0 讨论(0)
  • 2021-02-01 21:57

    Creating this kind of tween animation is simple. Just follow the steps,

    Step 1

    Create a directory anim inside the res directory and put this as slide.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/linear_interpolator"
        android:fillAfter="true">
    
       <translate
            android:fromXDelta="0%p"
            android:toXDelta="75%p"
            android:duration="800" />
    </set>
    

    You can obviously customize the animation by changing the two attributes fromXDelta and toXDelta. The %p refers to with respect to the parent which simply means that it will move the image 75% with respect to the parent.

    Step 2

    // Refer the ImageView like this
    imageView = (ImageView) findViewById(R.id.img);
    
    // Load the animation like this
    animSlide = AnimationUtils.loadAnimation(getApplicationContext(),
                        R.anim.slide);
    
    // Start the animation like this
    imageView.startAnimation(animSlide);
    

    You can also setInterpolator() and setListeners() if you want to. I haven't shown them here to keep it simple. If you need, just let me know.

    NOTE

    As you have mentioned repeatedly, that you are experiencing a laggy animation. I have tested this animation on 3 real devices and 2 emulators and the animation was buttery smooth on all of them. Tested on low end devices like Moto E to high end devices like Nexus 5 and Galaxy S6.

    If you still have a lag running this code, then the test device must be the reason. The code is perfect.

    UPDATE

    I just checked on my Moto G running on Lollipop too, the animation is running smoothly. This is a very small and light-weight animation, and should never be laggy. If you are still getting a lag, then it must be the device you are testing, or some other piece of code on that Activity making the UI slow or unresponsive.

    Try to check which one is applicable to you,

    • I have tested on a total of 6 devices now with no lag at all. So, you can be rest assured that your production app will not have any lag, it can be your device which is slow
    • If you are doing some heavy operations like accessing the file system, database, or any other heavy operation, it must be slowing down the UI thread and you are loosing frames. Try to use AsyncTask for these heavy operations
    0 讨论(0)
  • 2021-02-01 22:03

    try the code below

    TranslateAnimation animation = new TranslateAnimation(0.0f, 0.0f, 0.0f, 1500.0f); // new TranslateAnimation (float fromXDelta,float toXDelta, float fromYDelta, float toYDelta)
    animation.setDuration(2000); // animation duration
    animation.setRepeatCount(1); // animation repeat count if u repeat only once set to 1 if u don't repeat set to 0
    animation.setFillAfter(false);
    your_view .startAnimation(animation);//your_view for mine is imageView  
    
    0 讨论(0)
提交回复
热议问题