媒体播放器响应第二次点击暂停

2023-12-28

使用ViewPager进行图像滑动,每个图像onclick流不同的MP3。

应用程序包括 50 个页面(图像)和 50 个不同的 mp3,所有 mp3 都存储在应用程序本身上。

前任。第一页流 MP3(one),第二页流 MP3(two),依此类推,直到第 50 页。

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).

SECOND:

该应用程序包含 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
            }
        });

UPDATE:

在任意页面中:

假设第(一)页 ---> 单击播放 MP3 ---> (正在播放) ---> 单击暂停 MP3 ---> (暂停) ---> 滑动到任意页面 Rt 或 Lf --- >(以滑动到第(二)页为例) ---> 点击播放第(二)页MP3 ---> (播放中) ---> 点击暂停第(二)页MP3 ---> (已暂停) ---> (所有之前的 onclick 操作都正常工作) ---> 单击以恢复播放页面(二)中已处于暂停状态的 MP3====>但错误地,当您点击第(二)页中的图像恢复播放MP3时,您的手指不直,稍微倾斜,因此手指点击导致(点击第(二)页,同时滑动到第(三)页====>这是页面(三)MP3开始播放的问题itself从一开始就 。

我希望,如果这种情况偶尔发生或错误地发生,则不要开始播放第(三)页中的 MP3,直到我单击第(三)页中的图像,然后开始播放 MP3。

任何帮助将非常感激。


第一个问题的答案:-

只需复制粘贴此代码并让我知道我还没有测试过它,但有强烈的感觉它会起作用。

import java.lang.reflect.Field;
    public class MainActivity extends Activity {

        private ViewPager mViewPager;
        MediaPlayer mp;
        private boolean isPaused;
        private ArrayList<Integer> mMp3s;
        @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);
            mMp3s=getAllMp3FilesFromRaw();
            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 (mp != null) {
                        if (isPaused) {
                            mp.start();
                            isPaused = false;
                        } else {
                            mp.pause();
                            isPaused = true;
                        }
                    } else {
                        mp = MediaPlayer.create(MainActivity.this, mMp3s.get(mViewPager.getCurrentItem()));
                        mp.start();
                        isPaused = false;
                    }


                //AND SO ON FOR 50 PAGES//
                mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                    @Override
                    public void onPageSelected(int position) {
                        if (mp == null) {
                            return;
                        }
                        mp.release();
                        mp = null;
                        isPaused = true;
                    }

                    @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
                        finish();
                        MainActivity.this.mp = null;
                    }
                });

                return super.onSingleTapConfirmed(e);
            }
        }

        /**
        *Do it on background thread if it blocks the UI.
        */
        private ArrayList<Integer> getAllMp3FilesFromRaw() {
            ArrayList<Integer> mp3s = new ArrayList<>();
            try {
                Field fields[] = R.raw.class.getDeclaredFields();
                for (int i = 0; i < fields.length; i++) {
                    Field f = fields[i];

                    int resIdentifier = getResources().getIdentifier(f.getName(), "raw", getPackageName());
                    mp3s.add(resIdentifier);
                }
                return mp3s;

            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    }

逻辑是在启动应用程序时获取所有 mp3 文件资源 ID,如果此过程花费太多时间,请在后台线程上执行此操作。

现在使用这些资源 ID 播放您的歌曲,您获取的列表可能会出现一些问题,就像它们可能与您的图像或 viewpager 编号不匹配一样,因为如果您遇到任何错误,您将不得不应用一些其他逻辑,请告诉我。

第二个问题答案:-现在我假设,当您想单击图像同时播放音乐时,页面会被错误地滑动,当它到达其他页面时,它会立即开始播放该页面的音乐。如果我理解你的问题,因为我仍然不知道你使用的是哪些代码,我将指导你完成基于你可以应用逻辑的方法。

当页面切换到下一页时

onPageChanged(int position)

方法将被调用https://stackoverflow.com/a/11294494/5492047 https://stackoverflow.com/a/11294494/5492047在这里你可以应用逻辑。 现在,如果音乐正在播放并且您在第一页并且您滑到了第二页,那么您需要做什么

onPageChanged(int position)
    {
     mp.release();
     mp=null;
    //Now initialiase it again with page two's music.
    mp = MediaPlayer.create(MainActivity.this, R.raw.aa);
    }

并且不要调用 mp.start(); 现在当用户单击图像时

 OnClickListener(View view){
    //use the same instance of mediaplayer and call mp.start();
    if(isPlaying){
       mp.pause();
    }else{
    mp.start();
 }
}

我假设您只使用一个 MediaPlayer 实例,与您在代码中显示的不同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

媒体播放器响应第二次点击暂停 的相关文章

随机推荐

  • vagrant 连接虚拟机失败

    我正在运行 vagrant up 命令来连接到虚拟机 在运行此命令时出现下面提到的错误 我尝试了几个步骤以在 GUI 模式打开的情况下运行它 但是 GUI 模式 本身并没有打开任何东西 在单独的命令提示符中运行此命令时 它会自行打开和关闭
  • Xamarin 表单从文本文件读取结果为空

    我的项目文件资源管理器中有 data txt 文件 我想从这个文本文件中读取数据 但每次尝试时 结果都是空 程序崩溃 我写的代码是 public MapPage var assembly typeof MapPage GetTypeInfo
  • 通过循环生成[0, 1001]中不重复随机数的随机数

    我需要在plpgsql中生成一个不重复的随机数的随机数 非重复数应在 1 1001 范围内 但是 该代码生成的数字超过 1001 directed2number trunc Random 7 1 counter directed2numbe
  • 语法错误或访问冲突:1055 group by 中的表达式 #17

    我尝试使用 laravel 5 3 中的组进行查询 我发现 SQLSTATE 42000 语法错误或访问冲突 1055 SELECT 列表的表达式 17 不在 GROUP BY 子句中 并且包含非聚合列 testtravel country
  • 在哪里可以找到有关转义字符(例如“\”)的文档

    我想更好地了解 R 中的转义字符序列 我尝试过搜索类似的内容 但是 它逃脱了自身并且 我想避免这种行为cat 例如 cat Versus cat 您正在寻找的帮助页面是 Quotes 大写Q 字符串文字语法也有描述 恕我直言 不太清楚 ht
  • 在 Python/Numpy/Pandas 中查找连续值块的开始和结束

    我想在 numpy 数组或最好是 pandas DataFrame 中找到相同值块的开始和停止索引 沿着 2D 数组的列的块 以及沿着 n 维数组的最快变化的索引 我只在单个维度上查找块 并且不想在不同的行上聚合 nan 从这个问题开始 在
  • iOS 9 中的 Spotlight 扩展

    我已经下载了 Xcode 7 beta 并在那里发现了一种新型扩展 2015 年 WWDC 上对此只字未提 它被称为聚光灯延伸 When 聚光灯扩展在 iOS 9 中被称为以及它的用途是什么 From iOS 9 0 https devel
  • React Native 首次加载时图像闪烁

    我正在尝试构建一个带有动画按钮的 ReactNative 应用程序 问题是 该动画在应用程序第一次启动后无法正常工作 有一些白色的闪烁 但在动画第一次出现错误后 一切都按预期进行 我已经尝试过多种方式预加载图像 但没有成功 这是我的最小工作
  • 无法安装适用于 AMD 处理器的 Android 仿真器管理程序驱动程序(安装程序)

    如上所述通过 GUI 禁用 HyperV Disable WindowsOptionalFeature Online FeatureName Microsoft Hyper V 然后通过上面的 powershell 进行确认 然而 当运行
  • 使用 scipy/numpy 在 Python 中解析字母数字 CSV 的最终方法

    我一直在尝试找到一种良好且灵活的方法来在 Python 中解析 CSV 文件 但似乎没有一个标准选项符合要求 我很想自己写一个 但我认为 numpy scipy 和 csv 模块中存在的某种组合可以满足我的需要 所以我不想重新发明轮子 我想
  • 在 .js 文件中包含 .js 文件 [重复]

    这个问题在这里已经有答案了 我想知道是否可以包括 js文件在另一个文件中 js file 我想要这样做的原因是为了将客户端包含的内容保持在最低限度 我有一些 js已经编写了客户端所需功能的文件 客户将有一个 html 文件 他 她用 js文
  • 如何获取路径相关类型的类标签

    我有一个抽象的路径相关类型 我需要对其进行 ClassTag 有没有比手动提取每个具体派生类的隐式更好的方法 trait Foo type A ClassTag Need the ClassTag of A later val ctA Cl
  • 使用 C++ 中的 scanLine() 方法存储 QImage 的所有像素

    我正在尝试使用修改图像Qt与scanLine http doc qt io qt 4 8 qimage html scanLine方法 此方法返回指向给定行数据的指针 我创立了如何读取行here https stackoverflow co
  • 动态更改日志文件的文件路径.NET Core + NLog

    在我的 NET Core 应用程序中 我使用一些环境 并且我想为每个环境使用不同的路径来记录文件 例如 Development c logs Staging d apps logs 对于每个环境我都有配置部分appsettings env
  • Windows 7:超出 C++ std::this_thread::sleep_for

    我们的代码是用 C 11 VS2012 Win 7 64bit 编写的 C 库提供了sleep for我们使用的函数 我们观察到 C sleep for有时会出现较大的超调 换句话说 我们请求睡眠 15 毫秒 但睡眠结果是例如 15 毫秒
  • YouTube API:如何获取 liveChatId?

    文档说 liveChatId 参数指定将返回其消息的聊天 ID 与广播关联的实时聊天 ID 在 liveBroadcast 资源的 snippet liveChatId 属性中返回 但是 当使用 API Explorer 和 youtube
  • 从特定列 scala Spark 数据帧获取最小值和最大值

    我想从我的数据框中访问特定列的最小值和最大值 但我没有列的标题 只有它的编号 所以我应该使用 scala 吗 也许是这样的 val q nextInt ncol we pick a random value for a column num
  • Javascript:如何正确扩展类

    在互联网上搜索时 我总是遇到这种 Javascript 类扩展方法 function extend Child Parent var F function F prototype Parent prototype Child prototy
  • ILNumerics 在特定位置绘制平面

    我目前正在使用 ILNumerics API 并开始在立方体中绘制几个点 然后我通过这些点计算了一个回归平面 现在我想在相同的场景图中绘制平面 但大小仅与点云相同 我得到了平面的参数 a b c f x y a x b y c 我知道只有
  • 媒体播放器响应第二次点击暂停

    使用ViewPager进行图像滑动 每个图像onclick流不同的MP3 应用程序包括 50 个页面 图像 和 50 个不同的 mp3 所有 mp3 都存储在应用程序本身上 前任 第一页流 MP3 one 第二页流 MP3 two 依此类推