简体   繁体   English

如何在fling上更改imageview中的图像

[英]How to change images in imageview on fling

I have a relative layout which contains an image. 我有一个包含图像的relative layout I have like 10-20 images in drawable folder and a hashmap which stores these images. 我在drawable文件夹中有10-20张图像,还有一个存储这些图像的hashmap图。

On swiping below the image from left to right, it should change to next image. 从左向右在图片下方滑动时,应更改为下一张图片。 On each swipe, it should change to next image from hashmap . 每次滑动时,它应从hashmap更改为下一张图像。

I am completely new to java and android programming and help in any way is appreciated. 我对Java和android编程是完全陌生的,以任何方式提供的帮助都值得赞赏。

This is what I have: 这就是我所拥有的:

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.bschiranth.homework2_chiranthbs.MainActivity">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/alice"
        android:onClick="onClick"
        android:clickable="true"
        android:src="@drawable/alice"/>

    <SeekBar
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/zoombar"
        android:max="100"
        android:progress="50"
       android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"/>
</RelativeLayout>

and my java: 和我的java:

@Override
public boolean onFling(MotionEvent event1, MotionEvent event2,
                       float velocityX, float velocityY) {
    Log.d("fling", "doing fling");

    MovieData movieData = new MovieData();
    HashMap hashMap = new HashMap();
    for(int i=1;i<movieData.getSize();i++)
    {
        hashMap = movieData.getItem(i);
    }

    if(event1.getX()-event2.getX()> SWIPE_MIN_DISTANCE && Math.abs(velocityX)>SWIPE_THRESHOLD_VELOCITY)
    {
        Toast.makeText(Activity_Control.this,
                "its flinging right to left", Toast.LENGTH_SHORT).show();
        imageView.setImageResource(R.drawable.avatar);
    }
    if(event2.getX()-event1.getX()> SWIPE_MIN_DISTANCE && Math.abs(velocityX)>SWIPE_THRESHOLD_VELOCITY)
    {
        Toast.makeText(Activity_Control.this,
                "its flinging left to right", Toast.LENGTH_SHORT).show();
        imageView.setImageResource(R.drawable.avengers);
    }
    return true;
}

Better you can use view pager instead of imageview 更好的是,您可以使用视图寻呼机代替imageview

<?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.support.v4.view.ViewPager
    android:id="@+id/myfivepanelpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

  </LinearLayout>

ViewPagerAdapter.java ViewPagerAdapter.java

        import android.app.Activity;
        import android.os.Parcelable;
       import android.support.v4.view.PagerAdapter;
      import android.support.v4.view.ViewPager;
     import android.view.View;
        import android.view.ViewGroup.LayoutParams;
     import android.widget.ImageView;
     import android.widget.ImageView.ScaleType;

      public class ViewPagerAdapter extends PagerAdapter {

      Activity activity;
      int imageArray[];

      public ViewPagerAdapter(Activity act, int[] imgArra) {
      imageArray = imgArra;
      activity = act;
       }

         public int getCount() {
         return imageArray.length;
         }

        public Object instantiateItem(View collection, int position) {
          ImageView view = new ImageView(activity);
         view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
         LayoutParams.FILL_PARENT));
         view.setScaleType(ScaleType.FIT_XY);
         view.setBackgroundResource(imageArray[position]);
          ((ViewPager) collection).addView(view, 0);
          return view;
          }

          @Override
           public void destroyItem(View arg0, int arg1, Object arg2) {
          ((ViewPager) arg0).removeView((View) arg2);
           }

           @Override
            public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == ((View) arg1);
           }

           @Override
         public Parcelable saveState() {
           return null;
           }
           }

PageIndicatorActivity.java PageIndicatorActivity.java

  public class PageIndicatorActivity extends Activity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ViewPagerAdapter adapter = new ViewPagerAdapter(this, imageArra);
  ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager);
  myPager.setAdapter(adapter);
  myPager.setCurrentItem(0);
  }

   private int imageArra[] = { R.drawable.antartica1, R.drawable.antartica2,
   R.drawable.antartica3, R.drawable.antartica4,
   R.drawable.antartica5, R.drawable.antartica6,
   R.drawable.antartica7, R.drawable.antartica8 };

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
   getMenuInflater().inflate(R.menu.activity_main, menu);
   return true;
   }

    }

      public int getCount() {
      return imageArray.length;
        }

     public Object instantiateItem(View collection, int position) {
     ImageView view = new ImageView(activity);
     view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
     LayoutParams.FILL_PARENT));
     view.setScaleType(ScaleType.FIT_XY);
     view.setBackgroundResource(imageArray[position]);
      ((ViewPager) collection).addView(view, 0);
       return view;
        }

      @Override
     public void destroyItem(View arg0, int arg1, Object arg2) {
    ((ViewPager) arg0).removeView((View) arg2);
    }

       @Override
      public boolean isViewFromObject(View arg0, Object arg1) {
       return arg0 == ((View) arg1);
      }

       @Override
     public Parcelable saveState() {
      return null;
     }
    }

This can be done by ViewFlipper as described below. 可以通过ViewFlipper如下所述进行操作。

This is your Activity.xml file 这是您的Activity.xml文件

<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/view_flipper"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".HowToUseActivity" >
    <ImageView
        android:id="@+id/imageHowToUse"
        android:contentDescription="@string/app_name"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@mipmap/screen_1" />
</ViewFlipper>

declare required variables in your activity class 在活动类中声明所需的变量

private int number = 0;
private float initialX;
private ImageView imageView;

in your Activity 's onCreate(...) method retrieve the ImageView ActivityonCreate(...)方法中检索ImageView

imageView = (ImageView) findViewById(R.id.imageHowToUse);

override the method onTouchEvent(...) in same activity 覆盖同一活动中的onTouchEvent(...)方法

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch(event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            initialX = event.getX();
            break;
        case MotionEvent.ACTION_UP:
            float finalX = event.getX();
            if (initialX > finalX) {
                if (number >= 3) {
                    break;
                }
                next();
            } else {
                if(number <= 0) {
                    break;
                }
                previous();
            }
            break;
    }
    return false;
}

private void next() {
    number++;
    imageView.setImageResource(getImage());
}

private void previous() {
    number--;
    imageView.setImageResource(getImage());
}

then write method getImage() to get next image you want to display 然后编写方法getImage()以获取要显示的下一张图像

private int getImage() {
    int resource = R.mipmap.screen_1;
    switch(number) {
        case 0:
            resource = R.mipmap.screen_1;
        break;
        case 1:
            resource = R.mipmap.screen_2;
            break;
        case 2:
            resource = R.mipmap.screen_3;
            break;
    }
    return resource;
}

this is working code in my project. 这是我的项目中的工作代码。 It'll help you. 会帮你的。

NOTE : R.mipmap.screen_* is the image resource present in my resource directory. 注意:R.mipmap.screen_ *是资源目录中存在的图像资源。

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

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