ViewPager swipe previous sound

安稳与你 提交于 2019-12-24 04:20:44

问题


Here i am using viewpager to swipe my images & it plays different sound on each image swipe. Now Its working fine but when i swipe back the sound does not match the image...

My code:-

imagepageradapter

package com.android.learning_numbers;

public class ImagePagerAdapter {

}

Main Activity

package com.android.learning_numbers;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

public class Numbers extends Activity {

    MediaPlayer mp;
    MediaPlayer player;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_numbers);
        ViewPager viewPager = (ViewPager)findViewById(R.id.view_pager);
        ImagePagerAdapter adapter = new ImagePagerAdapter();
        viewPager.setAdapter(adapter);
        player = MediaPlayer.create(this, R.raw.jingle);
        player.setLooping(true);
        player.setVolume(100, 100);
        player.start();
     }

     @Override
     protected void onPause() {
         super.onPause();
         player.pause();
     }

     @Override
     protected void onResume() {
         super.onResume();
         player.start();
     }

private class ImagePagerAdapter extends PagerAdapter {

         private int[] mImages = new int[] {R.drawable.no1,R.drawable.no2,R.drawable.no3,R.drawable.no4,R.drawable.no5,R.drawable.no6,R.drawable.no7,R.drawable.no8,R.drawable.no9,R.drawable.no10,R.drawable.bg2,};
         private int[] mAudio = new int[]{R.raw.one,R.raw.two,R.raw.three,R.raw.four,R.raw.five,R.raw.six,R.raw.seven,R.raw.eight,R.raw.nine,R.raw.ten,R.raw.one,};

         @Override
         public int getCount() {
         return mImages.length;
         }

         @Override
         public boolean isViewFromObject(View view, Object object) {
         return view == ((ImageView) object);
         }

         @Override
         public Object instantiateItem(ViewGroup container, int position) {
            Context context = Numbers.this;
            ImageView imageView = new ImageView(context);
            int padding =context.getResources().  
            getDimensionPixelSize(R.dimen.activity_vertical_margin);
            imageView.setPadding(padding, padding, padding, padding);
            imageView.setScaleType(ImageView.ScaleType.CENTER);
            imageView.setImageResource(mImages[position]);
            ((ViewPager) container).addView(imageView, 0); 
            if(position>=1){
            mp = MediaPlayer.create(Numbers.this, mAudio[position-1]);
            mp.start();
            }
            return imageView;
         }

          @Override
         public void destroyItem(ViewGroup container, int position, Object object) {
           ((ViewPager) container).removeView((ImageView) object);
         }
     }
     }

回答1:


Move your MediaPlayer object and code for playing the sound to onPageChangeListener of your ViewPager object. Currently it is playing audio only when the items are instantiated.

If you move them to onPageChangeListener it will play on each page change irrespective of if a new item is instantiated or not.

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_numbers);
    ViewPager viewPager = (ViewPager)findViewById(R.id.view_pager);
    ImagePagerAdapter adapter = new ImagePagerAdapter();
    viewPager.setAdapter(adapter);
    viewPager.setOnPageChangeListener(player);
    player = MediaPlayer.create(this, R.raw.jingle);
    player.setLooping(true);
    player.setVolume(100, 100);
    player.start();
 }

OnPageChangeListener player = new OnPageChangeListener()
{

    @Override
    public void onPageSelected(int arg0)
    {
        mp = MediaPlayer.create(Numbers.this, mAudio[arg0]);
        mp.start();
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2)
    {
    }

    @Override
    public void onPageScrollStateChanged(int arg0)
    {
    }
};



回答2:


I found my answer. Now this is the code which definitely work

public class Numbers extends Activity {
    MediaPlayer mp;
    MediaPlayer BG;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_numbers);
        ViewPagerAdapter adapter = new ViewPagerAdapter(this, imageArra);
        ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager);
        myPager.setOnPageChangeListener(player);
        myPager.setAdapter(adapter);
        myPager.setCurrentItem(0);
        BG = MediaPlayer.create(this, R.raw.jingle);
        BG.setLooping(true);
        BG.setVolume(100, 100);
        BG.start();
        mp = MediaPlayer.create(Numbers.this, mAudio[0]);
        mp.start();
    }

    @Override
    protected void onPause() {
        super.onPause();
        BG.pause();
        }

    @Override
    protected void onResume() {
    super.onResume();
    BG.start();
    }

    private int[] mAudio = new int[]{R.raw.one,
                                     R.raw.two,
                                     R.raw.three,
                                     R.raw.four,
                                     R.raw.five,
                                     R.raw.six,
                                     R.raw.seven,
                                     R.raw.eight,
                                     R.raw.nine,
                                     R.raw.ten};

    private int imageArra[] =  {R.drawable.no1,
                                R.drawable.no2,
                                R.drawable.no3,
                                R.drawable.no4,
                                R.drawable.no5,
                                R.drawable.no6,
                                R.drawable.no7,
                                R.drawable.no8,
                                R.drawable.no9,
                                R.drawable.no10};

    public  OnPageChangeListener player = new OnPageChangeListener()
    {

        @Override
        public void onPageSelected(int arg1)
        {
        mp = MediaPlayer.create(Numbers.this, mAudio[arg1]);
        mp.start();
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2)
        {
        }

        @Override
        public void onPageScrollStateChanged(int arg0)
        {
        }
    };

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

}



回答3:


It has worked for me

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_farm_animals);
    ButterKnife.bind(this);
    farmAnimalAdapter = new FarmAnimalAdapter(this);
    viewPager.setOnPageChangeListener(players);
    viewPager.setAdapter(farmAnimalAdapter);

}
public int[] animal_images = new int[]{
        R.drawable.cow,
        R.drawable.sheep,
        R.drawable.horse,
        R.drawable.goat
};
public int[] animal_sound = new int[]{
        R.raw.cow,
        R.raw.sheep,
        R.raw.horse,
        R.raw.goat
};
public String[] names = new String[] {
        "COW","SHEEP","HORSE","GOAT"
};
ViewPager.OnPageChangeListener players= new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int i, float v, int i1) {

    }

    @Override
    public void onPageSelected(int i) {
        //audio
        MediaPlayer sound = MediaPlayer.create(getApplicationContext(),animal_sound[i]);
        sound.start();
    }

    @Override
    public void onPageScrollStateChanged(int i) {

    }
};`   public class FarmAnimalAdapter extends PagerAdapter{
    Context mContext;
    LayoutInflater mLayoutInflater;


    public FarmAnimalAdapter(Context mContext) {
        this.mContext = mContext;
        this.mLayoutInflater = mLayoutInflater;
    }
    @Override
    public int getCount() {
        return names.length ;
    }
    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        mLayoutInflater =(LayoutInflater)mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
        View view = mLayoutInflater.inflate(R.layout.farmanimal_adapter_list,container,false);
        ImageView txtimage = (ImageView)view.findViewById(R.id.txtimage);
        AppCompatTextView txtname = (AppCompatTextView)view.findViewById(R.id.txtname);
        txtimage.setImageResource(animal_images[position]);
        txtname.setText(names[position]);
        container.addView(view);
        return view;
    }

  @Override
   public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
       container.removeView((RelativeLayout)object);
   }

}

`

`



来源:https://stackoverflow.com/questions/21227194/viewpager-swipe-previous-sound

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!