Skip to content Skip to sidebar Skip to footer

ViewPager Swipe Previous Sound

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

Solution 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)
    {
    }
};

Solution 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;
    }

}

Solution 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);
   }

}

`

`


Post a Comment for "ViewPager Swipe Previous Sound"