Используется ViewPager для скольжения изображений, каждое изображение в потоковом потоке отличается от MP3.
приложение, включающее 50 страниц (изображения) и 50 разных mp3, все mp3, хранящиеся в самом приложении.
ех. Первый поток MP3 (один), поток второй страницы MP3 (два) и т.д. До пятидесяти.
FIRST:
его работа прекрасна только для одной проблемы:
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, так как все такой же функциональный цикл.
любые советы, пожалуйста и как их применять при кодировании.
MainActivity:
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);
}
}
}
ImageAdapter:
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
}
});
UPDATE:
На любой странице:
позволяет указать страницу (одна) --- > нажмите, чтобы воспроизвести MP3 --- > (воспроизведение) --- > нажмите, чтобы приостановить MP3 --- > (приостановлено) --- > проведите по любой странице Rt или Lf --- > (например, на странице (два)) --- > нажмите, чтобы воспроизвести MP3 на странице (два) --- > (воспроизведение) --- > нажмите, чтобы приостановить MP3 на странице (два) --- > (приостановлено) --- > (все предыдущие действия onclick работают корректно) --- > нажмите, чтобы возобновить воспроизведение MP3 на странице (два), которая уже в состоянии паузы ==== > , но ошибочно, когда вы щелкаете по изображению на странице (два), чтобы возобновить воспроизведение MP3, ваш палец не прям, его слегка наклонены, поэтому нажмите пальцем на кнопку (нажмите на страницу (два) и в то же время проведите пальцем по странице (три) ==== > вот проблема с тем, что страница (три) проигрывателя MP3 начинается с самого .
Я хочу, чтобы это случалось случайно или по ошибке, чтобы не начать проигрывать MP3 на странице (три), пока я не щелкнул изображение на странице (три), а затем начал проигрывать MP3.
любая помощь будет действительно оценена.