我想在我的Android应用程序中添加图片幻灯片,就像Flipkart Android应用程序一样。将有三个图像。首先,它将显示第一张图像。当有人触摸水平移动时,它将显示下一个。

我是android的初学者。不知道如何实现这一目标。需要一些帮助。

谢谢。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //addListenerOnButton();
    //changeOnTouch();
}

public void changeOnTouch() {
    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;
        }
 });
}

最佳答案

这是我创建的一个示例,用于执行您使用ViewFlipper进行的操作

1)在anim文件夹中创建一个名为res的文件夹,并将以下xml文件保存在其中。这些是将用于管理视图过渡的动画文件。我不记得它们的来源。

a)enter.xml

<?xml version="1.0" encoding="utf-8"?>
<set>
    <translate
                xmlns:android="http://schemas.android.com/apk/res/android"
               android:fromXDelta="100%"
               android:toXDelta="0"
               android:interpolator="@android:anim/decelerate_interpolator"
               android:duration="@android:integer/config_mediumAnimTime"/>
</set>


b)exit.xml

<?xml version="1.0" encoding="utf-8"?>
<set>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
               android:fromXDelta="0"
               android:toXDelta="-100%"
               android:interpolator="@android:anim/decelerate_interpolator"
               android:duration="@android:integer/config_mediumAnimTime"/>
</set>


c)pop_enter.xml

<?xml version="1.0" encoding="utf-8"?>
<set>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
               android:fromXDelta="-100%"
               android:toXDelta="0"
               android:interpolator="@android:anim/decelerate_interpolator"
               android:duration="@android:integer/config_mediumAnimTime"/>
</set>


d)pop_exite.xml



<set>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
               android:fromXDelta="0"
               android:toXDelta="100%"
               android:interpolator="@android:anim/decelerate_interpolator"
               android:duration="@android:integer/config_mediumAnimTime"/>
</set>


2)接下来的两个动画文件用于指示在翻转方向上不再有可用的视图。也将它们保存在anim文件夹中。

a)no_next.xml

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


b)no_previous.xml

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


如果要更改动画的播放方式,请检查以下内容:Tween Animation

3)将其添加到您希望幻灯片显示的位置:

<!-- layout before your slide show -->
    <ViewFlipper
        android:id="@+id/viewFlipper1"
        android:layout_width="300dp"
        android:layout_height="500dp" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
            <ImageView
                android:id="@+id/image_view_flip1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:contentDescription=""
                android:src="@drawable/image1" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
            <ImageView
                android:id="@+id/image_view_flip2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:contentDescription=""
                android:src="@drawable/image2" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
                <ImageView
                    android:id="@+id/image_view_flip3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:contentDescription=""
                    android:src="@drawable/image3" />
        </LinearLayout>
    </ViewFlipper>
<!-- rest of your layout -->


4)将此方法添加到您的类中,它将管理视图转换:

ViewFlipper flipper;
private static Handler handler = new Handler();
public void slideFipper(final String direction){
    final Animation no_next = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.no_next);
    final Animation no_previuos = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.no_previous);
      handler.post(new Runnable(){
          public void run(){
            int currentView = flipper.getDisplayedChild();
            if (direction.equalsIgnoreCase("left")) {
                //left
                if (currentView < 2) {
                    flipper.setInAnimation(getApplicationContext(), R.anim.enter);
                    flipper.setOutAnimation(getApplicationContext(), R.anim.exit);
                    flipper.showNext();
                } else {
                    flipper.startAnimation(no_next);
                }
            } else {
                //right
                if (currentView > 0) {
                    flipper.setInAnimation(getApplicationContext(),R.anim.pop_enter);
                    flipper.setOutAnimation(getApplicationContext(), R.anim.pop_exit);
                    flipper.showPrevious();
                } else {
                    flipper.startAnimation(no_previuos);
                }
            }
          }
      });
}


5)将此添加到您的OnCreate方法。我们将找到鳍状肢视图并将其添加到TouchListener中。我使用此answer来获取触摸方向。

flipper = (ViewFlipper) findViewById(R.id.viewFlipper1);
        flipper.setOnTouchListener(new OnTouchListener() {

            float x1 = 0, x2, y1 = 0, y2, dx, dy;

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                String direction;
                switch(event.getAction()) {
                    case(MotionEvent.ACTION_DOWN):
                        x1 = event.getX();
                        y1 = event.getY();
                        break;
                    case(MotionEvent.ACTION_UP): {
                        x2 = event.getX();
                        y2 = event.getY();
                        dx = x2-x1;
                        dy = y2-y1;
                         // Use dx and dy to determine the direction
                        if(Math.abs(dx) > Math.abs(dy)) {
                            if(dx>0)  {
                                direction = "right";
                            } else {
                                direction = "left";
                            }
                            slideFipper(direction);
                        } else {
                            if(dy>0) direction = "down";
                            else direction = "up";
                        }
                    }
                }
                v.performClick();
                return true;
            }
        });

关于android - 如何将横幅幻灯片放映添加到Android应用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25321407/

10-11 22:28
查看更多