Viewpager与影音不同步 [英] Viewpager sound not synchronised with image

查看:133
本文介绍了Viewpager与影音不同步的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以基本上我想,当用户扫描的图像打一短声。有图片及数量;我的声音在这方面采取。声音精打不过我的问题是,在这里我的声音没有图像相匹配。可能是我想我已经不在我的code实现的OnPageChangeListener。任何一个可以帮助我在此我如何实现这个code ..

So basically i want to play a short sound when user swipes the images. There are number of images & sound i taken in this. Sound is playing fine But my problem is here my sound is not matches the image. May be i think i have not implemented OnPageChangeListener in my code. Can any one help me in this how do i implement this code..

package com.android.learning_numbers;

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

public class Numbers extends Activity {

     public class serv extends Service{

        MediaPlayer mp;
        public IBinder onBind1(Intent intent) {
            // TODO Auto-generated method stub
            return null;
        }
        public void onCreate()
        {   
            mp = MediaPlayer.create(this, R.raw.jingle);
            mp.setLooping(true);
        }
        public void onDestroy()
        {       
            mp.stop();
        }
        public void onStart(Intent intent,int startid){

            String tag = null;
            Log.d(tag, "On start");
            mp.start();
        }
        @Override
        public IBinder onBind(Intent arg0) {
            // TODO Auto-generated method stub
            return null;
         }
         }

    public static MediaPlayer mp = null;

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

     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,};
         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};
         @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); 

//for Sound 
if (mp != null) {
             mp.reset();
             mp.release();
                }

//the audio files are running here but not in sync with image
        mp = MediaPlayer.create(Numbers.this,mAudio[position]);
        mp.start();

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

下面我如何使用OnPageChangeListener ??

Here how do i use OnPageChangeListener??

推荐答案

您的问题是,你在播放声音时,你正在创建一个项目,它可能不一定是相同的,当你切换到一个项目的。您可以通过定义在你的类像这样使用OnPageChangeListener:

Your problem is that you're playing the sound whenever you are creating an item, which may not necessarily be the same as when you change to an item. You can use the OnPageChangeListener by defining it in your class like this:

public OnPageChangeListener mOnPageListener = new OnPageChangeListener() {

    @Override public void onPageSelected(int position) {
        //for Sound 
        if (mp != null) {
            mp.reset();
            mp.release();
        }

        //the audio files are running here but not in sync with image
        mp = MediaPlayer.create(Numbers.this, mAudio[position]);
        mp.start();

    }
    @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
    @Override public void onPageScrollStateChanged(int state) {}

};

然后你只需将其连接到您的ViewPager:

Then you just need to attach it to your ViewPager:

viewPager.setOnPageChangeListener(mOnPageListener);

viewPager.setOnPageChangeListener(mOnPageListener);

我也建议你不要每次都重新创建的MediaPlayer,而是缓存它的每一页。

I also recommend you not recreate your MediaPlayer every time, and instead cache it for each page.

这篇关于Viewpager与影音不同步的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆