viewpager+定时器实现图片的上下滑动并播放音乐

来源:互联网 发布:golang defer return 编辑:程序博客网 时间:2024/05/20 17:28

关键代码:
在activity中写入如下代码:

private ScheduledThreadPoolExecutor exec;//线程池private VerticalAdapter vAdapter1;//垂直ViewPager的adapterprivate VerticalViewPager verticalPager1;//垂直ViewPagerprivate List<View> pageViews;//存放imageview的Listprivate List<String> mediaUrls;// 音乐和图片urlprivate Button play;// 播放按钮/**     * true 播放音乐 false 停止播放     */    boolean isPlaying = false;    private MediaPlayer mPlayer;    private SharedPreferences sp;    /**     * true 请求JSON数据 false 不请求     */    public boolean isRequest = true;    private SeekBar seekBar1;//    private Timer timer;    private TimerTask timerTask;    private boolean isChanging = false;// 互斥变量,防止定时器与SeekBar拖动时进度冲突    private int currentItem = 0;// 当前页面    // 得到音乐和图片的url    protected static final int SUCCESS_GET_URL = 1;    // 读取缓存文件后刷新adapter    private static final int CACHEFILE = 2;    // 读取缓存    private static final int LOADMEDIA = 3;    private Handler handler = new Handler() {    public void handleMessage(android.os.Message msg) {        verticalPager1.setCurrentItem(currentItem);        switch (msg.what) {        case SUCCESS_GET_URL:// 下载数据            loadeMedia();            break;        case CACHEFILE:// 刷新adapter            updateAdapter();            break;        case LOADMEDIA:// 读取缓存            isRequest = false;            readCacheFile();            break;        }    }    // 更新adapter显示图片    private void updateAdapter() {        vAdapter1 = new VerticalAdapter(pageViews);        verticalPager1.setAdapter(vAdapter1);        vAdapter1.notifyDataSetChanged();        findViewById(R.id.loading).setVisibility(View.GONE);        rMedia.setVisibility(View.VISIBLE);        verticalPager1.setOnPageChangeListener(new OnPageChangeListener() {            @Override            public void onPageSelected(int position) {                currentItem = position;            }            @Override            public void onPageScrolled(int position, float positionOffset,                    int positionOffsetPixels) {                Log.e("sc", "----position----" + position                        + "----->positionOffset---" + positionOffset                        + "---->positionOffsetPixels---"                        + positionOffsetPixels);                if (position == pageViews.size() - 1) {                    verticalPager1.setCurrentItem(0, false);                }            }            @Override            public void onPageScrollStateChanged(int state) {                if (state == 1 && exec != null) {                    if (!exec.isShutdown()) {                        Log.e("1", "-----shutdown----");                        exec.shutdown();                        exec = null;                    }                } else if (state == 0) {                    Log.e("1", "----start----");                    synchronized (_lock) {                        if (exec == null) {                            exec = new ScheduledThreadPoolExecutor(1);                            exec.scheduleAtFixedRate(new ViewPagerTask(),                                    5, 5, TimeUnit.SECONDS);                        }                    }                }            }        });    }};byte[] _lock = new byte[1];/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);        sLogger.i("MeetingStartActivity:onCreate");        setContentView(R.layout.splash_activity);        initView();        readCacheFile();        }@Overrideprotected void onStart() {    // 用一个定时器 来完成图片切换    // Timer 与 ScheduledExecutorService 实现定时器的效果  // scheduledExecutorService = //Executors.newScheduledThreadPool(3);        exec = new ScheduledThreadPoolExecutor(1);        // 通过定时器 来完成 每2秒钟切换一个图片        // 经过指定的时间后,执行所指定的任务        // scheduleAtFixedRate(command, initialDelay, period, unit)        // command 所要执行的任务        // initialDelay 第一次启动时 延迟启动时间        // period 每间隔多次时间来重新启动任务        // unit 时间单位        // .scheduleAtFixedRate(command, initialDelay, period, unit)        exec.scheduleAtFixedRate(new ViewPagerTask(), 5, 5, TimeUnit.SECONDS);        super.onStart();    }// 用来完成图片切换的任务private class ViewPagerTask implements Runnable {    public void run() {        // 实现我们的操作        // 改变当前页面        currentItem = (currentItem + 1) % pageViews.size();        // Handler来实现图片切换        handler.obtainMessage().sendToTarget();    }}// 初始化Viewprivate void initView() {    pageViews = new ArrayList<View>();    mediaUrls = new ArrayList<String>();    mPlayer = new MediaPlayer();    mPlayer.setOnCompletionListener(new OnCompletionListener() {        @Override        public void onCompletion(MediaPlayer mp) {            SystemClock.sleep(1000);            mPlayer.seekTo(0);            play.setBackgroundResource(R.drawable.player);            isPlaying = false;        }    });    verticalPager1 = (VerticalViewPager) findViewById(R.id.pager1);    musicName = (TextView) findViewById(R.id.tv_music_name);    rMedia = (RelativeLayout) findViewById(R.id.rl_media);    downMusic.setOnClickListener(this);    seekBar1 = (SeekBar) findViewById(R.id.seekBar1);    seekBar1.setOnSeekBarChangeListener(this);    // 播放音乐按钮    play = (Button) findViewById(R.id.btn_play);}@Overridepublic void onClick(View v) {    switch (v.getId()) {    case R.id.btn_play:        playMusic();        break;    }}/** * 播放音乐 */private void playMusic() {    if (!isPlaying) {        mPlayer.start();        play.setBackgroundResource(R.drawable.paused);        isPlaying = true;    } else {        mPlayer.pause();        play.setBackgroundResource(R.drawable.player);        isPlaying = false;    }}@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,        boolean fromUser) {}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {    isChanging = true;}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {    mPlayer.seekTo(seekBar.getProgress());    isChanging = false;}/** * 读取缓存文件 */private void readCacheFile() {    if (Environment.getExternalStorageState().equals(            Environment.MEDIA_MOUNTED)) {        String musicDir = "/sdcard/meeting" + AppConfig.APP_ID + "/music/";        String imageDir = "/sdcard/meeting" + AppConfig.APP_ID + "/image/";        File musDirFile = new File(musicDir);        File imageDirFile = new File(imageDir);        if (!musDirFile.exists()) {            sp = null;            mediaRequest();//异步请求网络音乐和图片的url        } else {// 读取音乐/图片            if (isRequest) {                sp = getSharedPreferences("mediaurl", MODE_PRIVATE);                mediaRequest();                return;            }            sLogger.d("isrequest------>" + isRequest);            File[] musFiles = musDirFile.listFiles();            File[] imageFiles = imageDirFile.listFiles();            if (musFiles.length > 0 && imageFiles.length > 0) {                for (File file : musFiles) {                    if (file.exists()) {                        // Uri u = Uri.fromFile(file.getAbsoluteFile());                        // mPlayer =                        // MediaPlayer.create(MeetingStartActivity.this, u);                        try {                                musicName.setText(sp.getString("name", "123.mp3"));                            mPlayer.setDataSource(file.getAbsolutePath());                            mPlayer.prepare();                                  play.setBackgroundResource(R.drawable.paused);                                isPlaying = true;                        } catch (Exception e) {                            e.printStackTrace();                        }                        // 设置进度条                        seekBar1.setMax(mPlayer.getDuration());                        // 定时器记录播放进度                        timer = new Timer();                        timerTask = new TimerTask() {                            @Override                            public void run() {                                if (isChanging) {                                    return;                                }                seekBar1.setProgress(mPlayer.getCurrentPosition());                                                             }                        };                        timer.schedule(timerTask, 0, 10);                        mPlayer.start();                    }                }                File firstfile = imageFiles[0];                Bitmap bitmap2 = BitmapFactory.decodeFile(firstfile                        .getAbsolutePath());                ImageView firstImage = new ImageView(                        MeetingStartActivity.this);                Drawable drawable2 = new BitmapDrawable(bitmap2);                firstImage.setBackground(drawable2);                for (File file : imageFiles) {                    if (file.exists()) {                        try {                            FileInputStream is = new FileInputStream(file);                            Bitmap bitmap = BitmapFactory.decodeStream(is);                            ImageView imageView = new ImageView(                                    MeetingStartActivity.this);                            Drawable drawable = new BitmapDrawable(bitmap);                            imageView.setBackground(drawable);                            pageViews.add(imageView);                        } catch (FileNotFoundException e) {                            e.printStackTrace();                        }                    }                }                pageViews.add(firstImage);                Message msg = Message.obtain();                msg.what = CACHEFILE;                handler.sendMessage(msg);            } else {                try {                    String mediaurl = sp.getString("media", null);                    JSONArray array = new JSONArray(mediaurl);                    int length = array.length();                    for (int i = 0; i < length; i++) {                        ImageMusicInfo item = ImageMusicInfo                                .getFromJSON((JSONObject) array.get(i));                        if (item.imageUrl != null) {                            mediaUrls.add(item.imageUrl);                        }                    }                    loadeMedia();                } catch (JSONException e) {                    e.printStackTrace();                }            }        }    }}// 异步请求数据    private void mediaRequest() {        if (mRegisterTask != null) {            sLogger.d("mRegisterTask still running ");            return;        }    findViewById(R.id.loading).setVisibility(View.VISIBLE);    mRegisterTask = new ImageMusicTask();    String requestURL = URLHandler.getReqeust(URLHandler.URL_IMAGE,            "meetingid", AppConfig.APP_ID);    sLogger.i("requestURL:======>" + requestURL);    mRegisterTask.execute(requestURL);}private class ImageMusicTask extends HttpGetTask {    private ImageMusicInfo item;    @Override    protected void onPostExecute(String result) {        mRegisterTask = null;        // findViewById(R.id.include_layout_loading).setVisibility(        // View.GONE );        sLogger.i("ImageMusicTask:------>" + result);        try {            if (result != null) {                if ("[]".equals(result) || "".equals(result)) {                    Toast.makeText(MeetingStartActivity.this, "未找到资源", 0)                            .show();                    findViewById(R.id.loading).setVisibility(View.GONE);                    return;                }                /*                *将第一次请求的数据保存到sp中,用于判断服务端是否更新了数据,若没有直接读缓存,否则根据最新的音乐和图片url下载文件并删除原来的文件                */                if (sp == null) {                    sp = getSharedPreferences("mediaurl", MODE_PRIVATE);                } else {                    String oldResult = sp.getString("media", null);                    if (oldResult !=null && oldResult.equals(result)) {                        // 相等读缓存,不等删除原文件并下载数据                        isRequest = false;                        sLogger.w("isRequest========>" + isRequest);                        readCacheFile();                        return;                    }                }                Editor edit = sp.edit();                edit.putString("media", result);                edit.commit();                sLogger.e("sp------>" + sp.getString("media", null));                JSONArray array = new JSONArray(result);                int length = array.length();                for (int i = 0; i < length; i++) {                    item = ImageMusicInfo.getFromJSON((JSONObject) array                            .get(i));                    if (item.imageUrl != null) {                        mediaUrls.add(item.imageUrl);                    }                    if(item.name != null){//保存音乐文件名称                        Editor edit2 = sp.edit();                        edit2.putString("name", item.name);                        edit2.commit();                    }                }                    // 获取音乐图片url成功发送handler下载数据                    Message msg = Message.obtain();                    msg.what = SUCCESS_GET_URL;                    handler.sendMessage(msg);            } else {                Toast.makeText(MeetingStartActivity.this, "未找到资源", 0)                        .show();                findViewById(R.id.loading).setVisibility(View.GONE);            }        } catch (Exception e) {            e.printStackTrace();        }    }}/** * 下载音乐,图片 *  * @param path */protected void loadeMedia() {    new Thread() {        private File dir;        private InputStream is = null;        private FileOutputStream fos = null;        public void run() {            try {                deleteCachFile();                if (mediaUrls != null && mediaUrls.size() > 0) {                    for (int i = 0; i < mediaUrls.size(); i++) {                        String path = mediaUrls.get(i);                        int index = path.lastIndexOf(".");                        String str = path.substring(index + 1,                                path.length());                        HttpClient client = new DefaultHttpClient();                        HttpGet httpGet = new HttpGet(path);                        client.getParams().setParameter(                                CoreConnectionPNames.CONNECTION_TIMEOUT,                                5000);                        client.getParams().setParameter(                                CoreConnectionPNames.SO_TIMEOUT, 10000);                        HttpResponse response = client.execute(httpGet);                        int statusCode = response.getStatusLine()                                .getStatusCode();                        if (statusCode == 200) {                            is = response.getEntity().getContent();                            if (Environment.getExternalStorageState()                                    .equals(Environment.MEDIA_MOUNTED)) {// 判断SD卡是否安装                                String filePath = "/sdcard/";                                String fileName = "meeting"                                        + AppConfig.APP_ID;                                File file2 = new File(filePath + fileName);                                if (!file2.exists()) {                                    file2.mkdir();                                }                                String musicFile = filePath + fileName                                        + "/music";                                File file3 = new File(musicFile);                                if (!file3.exists()) {                                    file3.mkdir();                                }                                String picFile = filePath + fileName                                        + "/image";                                File file4 = new File(picFile);                                if (!file4.exists()) {                                    file4.mkdir();                                }                                // save file                                int fileIndex = path.lastIndexOf("/");                                String name = path.substring(fileIndex + 1,                                        path.length());                                if (isImage(str)) {                                    dir = new File(file4, name);                                }                                if (isAuto(str)) {                                    dir = new File(file3, name);                                }                                fos = new FileOutputStream(dir);                                byte[] by = new byte[1024];                                int len = 0;                                while ((len = is.read(by)) != -1) {                                    fos.write(by, 0, len);                                }                            }                        }                    }                    // 文件下载完成发送handler读取缓存                    Message msg = Message.obtain();                    msg.what = LOADMEDIA;                    handler.sendMessage(msg);                }            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (ProtocolException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            } finally {                if (fos != null) {                    try {                        fos.close();                    } catch (IOException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                }                if (is != null) {                    try {                        is.close();                    } catch (IOException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                }            }        }    }.start();}/** * 删除缓存文件 */protected void deleteCachFile() {    if (Environment.getExternalStorageState().equals(            Environment.MEDIA_MOUNTED)) {        String musicDir = "/sdcard/meeting" + AppConfig.APP_ID + "/music/";        String imageDir = "/sdcard/meeting" + AppConfig.APP_ID + "/image/";        File musicFile = new File(musicDir);        File imageFile = new File(imageDir);        if (musicFile.exists()) {            File[] listMusic = musicFile.listFiles();            if (listMusic != null && listMusic.length > 0) {                for (File file : listMusic) {                    if (file.isFile() && file.exists()) {                        file.delete();                    }                }            }            File[] listImage = imageFile.listFiles();            if (listImage != null && listImage.length > 0) {                for (File file : listImage) {                    if (file.isFile() && file.exists()) {                        file.delete();                    }                }            }        }    }}/** * 判断图片类型 *  * @param type *            文件后缀名 * @return */public boolean isImage(String type) {    if (type != null            && (type.equals("jpg") || type.equals("gif")                    || type.equals("png") || type.equals("jpeg")                    || type.equals("bmp") || type.equals("wbmp")                    || type.equals("ico") || type.equals("jpe"))) {        return true;    }    return false;}/** * 判断音乐类型 *  * @param type文件后缀名 * @return */public boolean isAuto(String type) {    if (type != null            && (type.equals("mp3") || type.equals("wav")                    || type.equals("rm") || type.equals("swf")                    || type.equals("wma") || type.equals("asf"))) {        return true;    }    return false;}@Overrideprotected void onStop() {    exec.shutdown();    isChanging = true;    super.onStop();}//按home键保存音乐的状态@Overrideprotected void onResume() {    if (mPlayer != null) {        if (!mPlayer.isPlaying()) {            seekBar1.setProgress(mPlayer.getCurrentPosition());            play.setBackgroundResource(R.drawable.paused);            mPlayer.start();        }    }    super.onResume();}@Overrideprotected void onPause() {    if (mPlayer != null) {        if (mPlayer.isPlaying()) {            mPlayer.pause();            play.setBackgroundResource(R.drawable.player);        }    }    super.onPause();}protected void onDestroy() {    isRequest = true;    if (mPlayer != null) {        if (mPlayer.isPlaying()) {            mPlayer.stop();        }        mPlayer.release();    }    sLogger.e("isrequest---->" + isRequest + "isChanging---->" + isChanging);    super.onDestroy();}

java类ImageMusicInfo:

public class ImageMusicInfo {public String id;public String meetingid;public String imageUrl;public String name;public static ImageMusicInfo getFromJSON(JSONObject object) {    ImageMusicInfo result = new ImageMusicInfo();    try {        if (object.has("id"))            result.id = object.getString("id");        if (object.has("meetingid"))            result.meetingid = object.getString("meetingid");        if(object.has("pic")){            String picUrl = object.optString("pic");//              String type = object.optString("type");                if(picUrl != null){//                  if("1".equals(type)){                        result.imageUrl = picUrl;//                  }else if("2".equals(type)){//                      result.musicUrl=picUrl;//                  }                }            }        if(object.has("name") && object.has("type")){              String name = object.optString("name");              String type = object.optString("type");              if("2".equals(type)){                  result.name = name;              }        }    } catch (JSONException e) {        e.printStackTrace();    }    return result;    }}

垂直的ViewPager下载地址:文件名是minimal.zip
http://c38.yunpan.360.cn/my/index/#%2F%E6%96%87%E6%A1%A3%2F%E6%96%87%E4%BB%B6%2F

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 京东白条分期买手机额度不够怎么办 京东白条闪付手机不支持开通怎么办 拼多多不小心下两次单付款了怎么办 不小心给了京东快递差评怎么办 京东金融不小心卸载了怎么办 如果京东快递不小心完成订单怎么办 订机票时没有用常旅客卡怎么办 京东退货退款卖家已签收了怎么办 京东账号手机号换了密码忘了怎么办 qq飞车手游录像下载失败怎么办 手机知道qq号怎么破解密码怎么办 网上购物已付钱迟迟不发货怎么办 有人冒充微信头像和熟人借钱怎么办 微信红包输了50多万怎么办 脖子里的绳结接口磨脖子怎么办 母比格犬生了小狗毛色变了怎么办 母比格犬生了小狗毛色很差怎么办 貂皮大衣上的暗扣掉了怎么办 呢子夹克袖子长但又不想改短怎么办 黑色的衣服熨的有点发亮怎么办 宿管阿姨工作中与学生起冲突怎么办 中通快递发的衣服不合适怎么办 加盟母婴店如果不干了货怎么办 双十一搞活动买的东西退货怎么办 天猫预售30天不发货怎么办 天猫搞活动的商品总不发货怎么办 淘宝买的东西物流把货物损坏怎么办 苹果手机5s每部存满怎么办 天猫退货分开发货退的话怎么办 淘宝优惠券电脑端显示不出来怎么办 天猫退货退款寄错了怎么办 天猫已退款货又发过来了怎么办 小米商城预售订单点错退款了怎么办 淘宝发布宝贝类目价格受限制怎么办 2019天猫续签评分不达标怎么办 天猫店铺动态不达标不能续签怎么办 京东自提发现货有问题怎么办 京东试用成功商家不发货怎么办 在淘宝主页搜不到我的店铺名怎么办 淘宝发货单号填到别人那去了怎么办 买家申请淘宝介入后同意退款怎么办