【发布时间】:2017-12-13 08:16:44
【问题描述】:
使用ViewPager进行图片滑动,每张图片点击流不同的MP3。
应用程序包括 50 个页面(图像)和 50 种不同的 mp3,所有 mp3 都存储在应用程序本身上。
例如。第一页流 MP3(一),第二页流 MP3(二),依此类推,直到第 50 页。
第一:
它工作正常只有一个问题是:
In any page --> clicking the image -->
PLAY MP3(one) --> click again--> PAUSE MP3 -->
in paused state of MP3(one) SWIPE to next page -->
--> in next page --> clicking the image -->
PLAY MP3(two) --> click to pause the MP3(two)
--> it doesn't respond to first click,it respond to second click to pause MP3(two).
第二次:
该应用程序包含 50 个页面和 50 个不同的 MP3,我是否需要重复媒体播放器代码 50 次,我已经这样做了,或者有更好的方法可以在应用于所有 50 个媒体播放器 MP3 的单个代码中做到这一点,因为所有人都有相同的功能循环。
请提供任何建议以及如何在编码中应用它。
主要活动:
public class MainActivity extends Activity {
private ViewPager mViewPager;
MediaPlayer mp;
private boolean isPaused;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager= (ViewPager) findViewById(R.id.view_pager);
ImageAdapter adapter = new ImageAdapter(this);
mViewPager.setAdapter(adapter);
final GestureDetector tapGestureDetector = new GestureDetector(this, new TapGestureListener());
mViewPager.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
tapGestureDetector.onTouchEvent(event);
return false;
}
});
}
private class TapGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
if (mViewPager.getCurrentItem() == 0) {
if (mp != null) {
if (isPaused) {
mp.start();
isPaused = false;
} else {
mp.pause();
isPaused = true;
}
} else {
mp = MediaPlayer.create(MainActivity.this, R.raw.aa);
mp.start();
}
}
if (mViewPager.getCurrentItem() == 1) {
if (mp != null) {
if (isPaused) {
mp.start();
isPaused = false;
} else {
mp.pause();
isPaused = true;
}
} else {
mp = MediaPlayer.create(MainActivity.this, R.raw.bb);
mp.start();
}
}
if (mViewPager.getCurrentItem() == 2) {
if (mp != null) {
if (isPaused) {
mp.start();
isPaused = false;
} else {
mp.pause();
isPaused = true;
}
} else {
mp = MediaPlayer.create(MainActivity.this, R.raw.cc);
mp.start();
}
}
if (mViewPager.getCurrentItem() == 3) {
if (mp != null) {
if (isPaused) {
mp.start();
isPaused = false;
} else {
mp.pause();
isPaused = true;
}
} else {
mp = MediaPlayer.create(MainActivity.this, R.raw.dd);
mp.start();
}
}
//AND SO ON FOR 50 PAGES//
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if (mp == null) {
return;
}
mp.release();
mp = null;
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
});
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer m) {
Toast.makeText(MainActivity.this,
"COMPLETED", Toast.LENGTH_LONG).show();
// Set the MainActivity member to null
MainActivity.this.mp = null;
}
});
return super.onSingleTapConfirmed(e);
}
}
}
图像适配器:
public class ImageAdapter extends PagerAdapter {
Context context;
private int[] GalImages = new int[] {
R.drawable.a,
R.drawable.b,
R.drawable.c,
R.drawable.d,
};
ImageAdapter(Context context){
this.context=context;
}
@Override
public int getCount() {
return GalImages.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((ImageView) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(context);
int padding = context.getResources().getDimensionPixelSize(R.dimen.activity_horizontal_margin);
imageView.setPadding(padding, padding, padding, padding);
imageView.setScaleType(ImageView.ScaleType.CENTER);
imageView.setImageResource(GalImages[position]);
((ViewPager) container).addView(imageView, 0);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((ImageView) object);
}
}
我是 android 新手,我试图修复它但没有成功,它的简单应用程序只包含 MainActivity 和 ImageAdapter。
我试过下面的代码还是没有解决问题:
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if (mp != null) {
if (mp.isPlaying()) {
mp.stop();
}
mp.release();
mp = null;
}
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
});
更新:
在任何页面中:
假设页面(一)--->点击播放MP3--->(播放)--->点击暂停MP3--->(暂停)--->滑动到任意页面Rt或Lf --->(以页面(二)为例)--->点击播放页面(二)的MP3 --->(正在播放)--->点击暂停页面(二)的MP3 --- >(暂停)--->(所有之前的onclick动作都正常工作)--->点击恢复播放已经处于暂停状态的页面(二)中的MP3 ====>但错误地当您点击页面(二)中的图像继续播放 MP3 ,手指不直,略微倾斜,因此手指点击导致(点击页面(二)并同时滑动到页面(三) ====>这里是页面(三)MP3从头自己开始播放的问题。
如果这种情况偶尔或错误地发生,我希望不要开始播放第 (3) 页中的 MP3,直到我单击第 (3) 页中的图像然后开始播放 MP3。
任何帮助将不胜感激。
【问题讨论】:
标签: java android android-viewpager android-mediaplayer