android - 如何在android中从左向右滑动组件

标签 android ontouchlistener gesturedetector ontouch

我尝试在布局文件中滑动组件。我尝试以不同的方式进行。但它对我不起作用。这是我以前做过的一些事情,

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

LinearLayout options_layout = (LinearLayout) findViewById(R.id.linearLayout);
for(int i=0;i<5;i++){
    View to_add = inflater.inflate(R.layout.layout_grid_01,options_layout,false);

    TextView text = (TextView) to_add.findViewById(R.id.txtView1);
    text.setText("Print - " + i);

    for(int j=0;j<5;j++){
        final View add=inflater.inflate(R.layout.layout_grid_02, (ViewGroup) to_add,false);

        TextView text1 = (TextView) add.findViewById(R.id.txtView2);
        text1.setText("Print double - " + j);

        add.setOnTouchListener(new OnSwipeTouchListener(MainActivity.this){
                public void onSwipeLeft() {
                }

                public void onSwipeTop() {
                }

                public void onSwipeBottom() {
                }
                @Override
                public void onSwipeRight() {
                    overridePendingTransition(R.anim.animation,R.anim.animation_2);
                }
        });

        ((ViewGroup) to_add).addView(add);
    }
    options_layout.addView(to_add);
}

OnSwipeTouchListener.java

import android.content.Context;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;

public class OnSwipeTouchListener implements OnTouchListener {

    private final GestureDetector gestureDetector;

    public OnSwipeTouchListener (Context ctx){
        gestureDetector = new GestureDetector(ctx, new GestureListener());
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
       return gestureDetector.onTouchEvent(event);
    }

    private final class GestureListener extends SimpleOnGestureListener {

        private static final int SWIPE_THRESHOLD = 100;
        private static final int SWIPE_VELOCITY_THRESHOLD = 100;

        @Override
        public boolean onDown(MotionEvent e) {
          return true;
        }

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            boolean result = false;
            try {
                float diffY = e2.getY() - e1.getY();
                float diffX = e2.getX() - e1.getX();
                if (Math.abs(diffX) > Math.abs(diffY)) {
                   if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                       if (diffX > 0) {
                          onSwipeRight();
                       } else {
                          onSwipeLeft();
                       }
                   }
                   result = true;
                }
                else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                    if (diffY > 0) {
                       onSwipeBottom();
                    } else {
                       onSwipeTop();
                    }
                }
                result = true;

           } catch (Exception exception) {
              exception.printStackTrace();
           }
           return result;
      }
  }

  public void onSwipeRight() {
  }

  public void onSwipeLeft() {
  }

  public void onSwipeTop() {
  }

  public void onSwipeBottom() {
  }
}

动画.xml

<?xml version="1.0" encoding="utf-8"?>
<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="700"/>
</set>

animation_2.xaml

<?xml version="1.0" encoding="utf-8"?>
<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="700" />
</set>

这是我在上面尝试执行的代码。 你有什么想法吗?

谢谢。

最佳答案

如果你想使用动画,你可以使用一个叫做 viewFlipper 的东西。

这里有一个很好的教程:http://www.warriorpoint.com/blog/2009/05/26/android-switching-screens-in-an-activity-with-animations-using-viewflipper/

关于android - 如何在android中从左向右滑动组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36277198/

相关文章:

java - Android 应用程序位图的替代方案

android - 我有一个问题 : RecyclerView showing wrong data when scrolling

java - Android 捕获 LinearLayout 上的触摸 : Cannot Resolve Symbol setOnTouchListener.

android - 从 fragment 中的 onLongClick 触发对话框中的 onTouch

flutter - 在 Flutter GestureDetector 上的 DoubleTap 上获取 "details"

flutter - 使用 GestureDetector 捕捉 MaterialButton child 的手势

flutter - 长按显示对话框,手指向上弹出

Android:如何将图像稍微定位在 View 之外

android - 使用 NDEF Android 应用程序记录 (AAR) 获取 NFC 标签

android - DrawerLayout 和 ImageView 都实现了 onTouchListener