MediaPlayer播放音乐

本文介绍了一个简单的音乐播放器应用实现方法,重点讲解了如何通过SeekBar控制音乐的播放进度,包括开始、暂停、停止、上下曲切换等功能。

1.音乐的播放,暂停,上一曲,下一曲


public class MainActivity extends Activity {

	private SeekBar sk;
	private TextView tv;
	private MediaPlayer mediaPlayer;
	private int[] musics;
	int h=0;
	int i = 5;
	private Timer timer;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		sk = (SeekBar) findViewById(R.id.sk);
		tv = (TextView) findViewById(R.id.tv);
		musics = new int[] { R.raw.q, R.raw.r, R.raw.s, R.raw.t, R.raw.w,
				R.raw.y };
		sk.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

			@Override
			// seekbar停止拖动
			public void onStopTrackingTouch(SeekBar seekBar) {
				//当没有歌曲播放的时候,拖动拖动条,不能执行
				if (mediaPlayer != null) {

					// 当用户停止拖动的时,得到seekbar的进度,然后给歌曲设置进度
					int progress = sk.getProgress();
					// 设置歌曲的当前进度
					mediaPlayer.seekTo(progress);

					// 开启进度条自动获取进度显示
					setSeekbar();
				} else {
					sk.setProgress(0);
				}
			}

			@Override
			// seekbar开始拖动
			public void onStartTrackingTouch(SeekBar seekBar) {

				// 当用户手动拖动进度条时,seekbar的进度要停止。
				//timet计时器停止,进度条就不会获得进度。不会来回跳跃
				Cancletimer();

			}

			@Override
			// seekbar进度改变。正在拖动
			public void onProgressChanged(SeekBar seekBar, int progress,
					boolean fromUser) {
			// 当拖动的时候,显示的时间随时在改变
				// formatData(progress);
				// 从当前进度获取到当前seekbar走的时间
				formatData(progress);

			}
		});
	}

	// 开始
	public void start(View v) {
		startmusic(i);

	}

	// 暂停
	public void pause(View v) {
		pausemusic();
	}

	// 停止
	public void stop(View v) {
		stopmusic();
	}

	// 上一首
	public void up(View v) {
		stop(v);
		--i;
		if(i==-1){
			i=5;
		}
		startmusic(i);
		
		
	}

	// 下一首
	public void next(View v) {
		//此处必须用stop(v)来控制控件的开关,才能使整个视图生效。
		stop(v);
		++i;
		if(i==6){
			i=0;
		}
		startmusic(i);
	}

	// 开始播放
	private void startmusic(int i) {
		if (mediaPlayer == null) {
			mediaPlayer = MediaPlayer.create(MainActivity.this, musics[i]);
			mediaPlayer.start();
		}
		mediaPlayer.start();
		// 设置进度条
		setSeekbar();
		//歌曲播放完之后自动播放
		mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
			
			@Override
			public void onCompletion(MediaPlayer mp) {
				next(null);				
			}
		});
	}

	// 暂停播放
	private void pausemusic() {
		if (mediaPlayer != null && mediaPlayer.isPlaying()) {
			mediaPlayer.pause();
		}
	}

	// 停止播放
	private void stopmusic() {
		//判断当歌曲没有播放时,mediaplayer为空,不能直接点击停止
		if (mediaPlayer != null) {

			mediaPlayer.stop();
			mediaPlayer.release();
			mediaPlayer = null;
//			Cancletimer();

	}
	}

	// 进度条的播放显示
	private void setSeekbar() {
		

			// 获取歌曲播放的长度
			int duration = mediaPlayer.getDuration();
			// 给seekbar设置最大值
			sk.setMax(duration);
			timer = new Timer();
			timer.schedule(new TimerTask() {

				public void run() {
					//当点击停止时,mediaplayer为空,会出现空指针
					if (mediaPlayer != null) {
					// 得到当前进度歌曲
					int currentPosition = mediaPlayer.getCurrentPosition();

					// 设置进度条
					sk.setProgress(currentPosition);
					}else {
						//设置初始停止时,进度条返回初始状态。
						sk.setProgress(0);
						
					}
				}
			}, 0, 500);
		} 


	private void Cancletimer() {
		
		//当没有点击开始时,
		if (timer != null) {
			timer.cancel();
		}
	}

	// 格式化毫秒值。设置显示的值
	public void formatData(long ss) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("mm:ss");
		Date date = new Date(ss);
		String format = dateFormat.format(date);
		// format就是格式化好的时间
		//
		// runOnUiThread(new Runnable() {
		//
		// @Override
		// public void run() {
		tv.setText(format);
		// }
		// });

	}

}

一、 内容概要 本资源提供了一个完整的“金属板材压弯成型”非线性仿真案例,基于ABAQUS/Explicit或Standard求解器完成。案例精确模拟了模具(凸模、凹模)与金属板材之间的接触、压合过程,直至板材发生塑性弯曲成型。 模型特点:包含完整的模具-工件装配体,定义了刚体约束、通用接触(或面面接触)及摩擦系数。 材料定义:金属板材采用弹塑性材料模型,定义了完整的屈服强度、塑性应变等真实应力-应变数据。 关键结果:提供了成型过程中的板材应力(Mises应力)、塑性应变(PE)、厚度变化​ 云图,以及模具受力(接触力)曲线,完整再现了压弯工艺的力学状态。 二、 适用人群 CAE工程师/工艺工程师:从事钣金冲压、模具设计、金属成型工艺分析与优化的专业人员。 高校师生:学习ABAQUS非线性分析、金属塑性成形理论,或从事相关课题研究的硕士/博士生。 结构设计工程师:需要评估钣金件可制造性(DFM)或预测成型回弹的设计人员。 三、 使用场景及目标 学习目标: 掌握在ABAQUS中设置金属塑性成形仿真的全流程,包括材料定义、复杂接触设置、边界条件与载荷步。 学习如何调试和分析大变形、非线性接触问题的收敛性技巧。 理解如何通过仿真预测成型缺陷(如减薄、破裂、回弹),并与理论或实验进行对比验证。 应用价值:本案例的建模方法与分析思路可直接应用于汽车覆盖件、电器外壳、结构件等钣金产品的冲压工艺开发与模具设计优化,减少试模成本。 四、 其他说明 资源包内包含参数化的INP文件、CAE模型文件、材料数据参考及一份简要的操作要点说明文档。INP文件便于用户直接修改关键参数(如压边力、摩擦系数、行程)进行自主研究。 建议使用ABAQUS 2022或更高版本打开。显式动力学分析(如用Explicit)对计算资源有一定要求。 本案例为教学与工程参考目的提供,用户可基于此框架进行拓展,应用于V型弯曲
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值