繁体   English   中英

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

[英]How to swipe a component left to right in android

我尝试在布局文件中刷一个组件。我尝试以不同的方式做。 但它对我不起作用。这是我以前做过的一件事,

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() {
  }
}

animation.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/

res/anim文件夹中添加以下文件:slide_in_left.xml:

  <?xml version="1.0" encoding="utf-8"?>
        <set xmlns:android="http://schemas.android.com/apk/res/android"
            android:shareInterpolator="true">
            <translate android:fromXDelta="-100%"
                android:toXDelta="0%" android:fromYDelta="0%"
                android:toYDelta="0%" android:duration="300">
            </translate>
   </set>

slide_in_right.xml:

  <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:shareInterpolator="true">
        <translate android:fromXDelta="-100%"
            android:toXDelta="0%" android:fromYDelta="0%"
            android:toYDelta="0%" android:duration="300">
        </translate>
    </set>

slide_out_left:

 <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromXDelta="0" android:toXDelta="-50%p"
                android:duration="@android:integer/config_mediumAnimTime"/>
        <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
                android:duration="@android:integer/config_mediumAnimTime" />
    </set>

slide_out_right:

 <?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="0">
        </translate>
    </set>

之后,您可以使用这些动画从左到右和从右到左滑动:

 overridePendingTransition(R.anim.slide_in_left,R.anim.slide_out_right);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM