迷你播放器--第一阶段(2)--退出时自动最小化(不是关闭),增加当前播放曲目的跑马灯效果

迷你播放器--第一阶段(2)

退出时自动最小化(不是关闭),增加当前播放曲目的跑马灯效果


本文章为CSDN作者原创,转载请保留出处:http://blog.csdn.net/lrs0304/article/details/38349741

查看项目源代码请前往:迷你播放器-综述


请注意,该项目为android项目,如果已经学习过这一节请阅读下一篇。

先上效果图


本节主要处理的问题

  1. 返回键退出时以最小化形式退出(类似于按下home键)
  2. 实现播放时歌曲名称以跑马灯形式滚动


1、返回键退出时以最小化形式退出

首先,我们在配置文件中声明该activity为单例模式,如下(android:screenOrientation="portrait"表示限制为竖屏,可根据实际情况去掉):
        <!-- singleTask能确保Task里面只有一个实例 -->
        <activity
            android:name="com.liangrensheng.music_player.activity.MainActivity"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>

然后我们还需要重载返回键,如果要按下了返回键的话就自动最小化。那么我们的程序怎么退出好呢,囧,这个暂时以menu键退出吧,在后面的内容里我们将添加退出按钮到侧边栏
	/**
	 * 模拟用户发出Home键,将当前activity隐藏
	 */
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			Intent intent = new Intent(Intent.ACTION_MAIN);
			/*
			 * intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 注意: 如果 launchMode
			 * 默认是以standard执行的,如果不添加 这个标记则会创建新的Activity并放
			 * 在与当前Activity相同的Task中我已经在ManiFest里面修改了可以不需要该标记
			 */
			intent.addCategory(Intent.CATEGORY_HOME);
			this.startActivity(intent);
			return true;
		} else if (keyCode == KeyEvent.KEYCODE_MENU) {
			finish();// 退出
		}
		return super.onKeyDown(keyCode, event);
	}

2、跑马灯形式显示当前正在播放的曲目

其实,TextView本身是具有跑马灯效果的属性设置的,但是,它要求该TextView必须得获取到焦点才能滚动,坑不坑?像下列设置就会造成一会能动一会不动(焦点只有一个)
android:ellipsize="marquee"   
android:focusable="true"   
android:marqueeRepeatLimit="marquee_forever"   
android:focusableInTouchMode="true"  
怎么办呢,我们去扩展TextView,姑且命名为MarqueeTextView,重载函数public boolean isFocused() ,使得其一直为真,这下它就得乖乖跑起来了
package com.liangrensheng.music_player.view;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;

public class MarqueeTextView extends TextView {

	public MarqueeTextView(Context context) {
		super(context);
	}

	// 始终返回true,即一直获取焦点
	@Override
	public boolean isFocused() {
		return true;
	}
}
然后我们得修改一下playIndex()函数,如果播放的话就以跑马灯形式滚动,暂停则停止
	/**
	 * 播放第index首音乐
	 */
	private void playIndex(int index) {
		if (mListViewAdapter.getCurPlayIndex() == index) {// 如果曲目相同
			if (mListViewAdapter.getCurPlayState() == MusicPlayState.S_PLAYING) {
				mplayer.pause();// 正在播放则暂停,否则播放
				mListViewAdapter.setPlayState(index, MusicPlayState.S_PAUSE);
				playState.setBackgroundResource(R.drawable.state_pause);
				musicName.setEllipsize(TruncateAt.END);
			} else {
				mplayer.start();// 我们还要更新列表显示播放状态~
				mListViewAdapter.setPlayState(index, MusicPlayState.S_PLAYING);
				playState.setBackgroundResource(R.drawable.state_play);
				musicName.setEllipsize(TruncateAt.MARQUEE);// 跑马灯
			}
		} else {// 重新缓冲曲目
			try {
				mplayer.reset();
				MusicData data = m_MusicFileList.get(index);
				mplayer.setDataSource(data.mMusicPath);
				mplayer.prepare();
				mplayer.start();
				mListViewAdapter.setPlayState(index, MusicPlayState.S_PLAYING);
				playState.setBackgroundResource(R.drawable.state_play);
				musicName.setText(data.mMusicName + " --- " + data.mMusicAritst<span style="font-family: Arial, Helvetica, sans-serif;"> + " --- " </span>);
				musicName.setEllipsize(TruncateAt.MARQUEE);// 跑马灯
			} catch (Exception e) {
				System.out.println("歌曲不存在或权限不足");
			}
		}
	}

本小节源代码下载 : http://download.csdn.net/detail/lrs0304/7730235


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值