`
阅读更多
MainActivity.java
package com.ct13;

import java.io.File;
import java.io.IOException;

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

	private Button btn_play, btn_pause, btn_stop, btn_hight, btn_low;
	private SurfaceView surfaceView;
	protected AudioManager audioManager;
	private MediaPlayer mediaPlayer;
	protected static int position = 0;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setWindow();
		setContentView(R.layout.activity_main);

		findViews();
		setListeners();
		audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
		mediaPlayer = new MediaPlayer();
		setSurfaceView();
	}

	private void setWindow() {
		// TODO Auto-generated method stub
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		MainActivity.this.getWindow().setFlags(
				WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
	}

	private void findViews() {
		// TODO Auto-generated method stub
		btn_play = (Button) this.findViewById(R.id.btn_play);
		btn_pause = (Button) this.findViewById(R.id.btn_pause);
		btn_stop = (Button) this.findViewById(R.id.btn_stop);
		btn_hight = (Button) this.findViewById(R.id.btn_hight);
		btn_low = (Button) this.findViewById(R.id.btn_low);
		surfaceView = (SurfaceView)findViewById(R.id.surface);
	}

	private void setListeners() {
		// TODO Auto-generated method stub
		btn_play.setOnClickListener(this);
		btn_pause.setOnClickListener(this);
		btn_stop.setOnClickListener(this);
		btn_hight.setOnClickListener(this);
		btn_low.setOnClickListener(this);
	}

	private void setSurfaceView() {
		// TODO Auto-generated method stub
		surfaceView.getHolder().setFixedSize(320, 320);
		surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
		surfaceView.getHolder().addCallback(new SurceCallBack());

	}

	private boolean isPlaying() {
		return mediaPlayer != null && mediaPlayer.isPlaying();
	}

	@Override
	public void onClick(View v) {

		switch (v.getId()) {
		case R.id.btn_play:
			if (isPlaying()) {
				return;
			} else {
				playMedia();
			}
			break;
		case R.id.btn_pause:
			if (isPlaying()) {
				position = mediaPlayer.getCurrentPosition();
				mediaPlayer.pause();
			}
			break;
		case R.id.btn_stop:
			if (isPlaying()) {
				mediaPlayer.stop();
				position = 0;
			} else {
				return;
			}
			break;
		case R.id.btn_hight:
			int volume2 = audioManager
					.getStreamVolume(AudioManager.STREAM_MUSIC);
			if (volume2 > 0) {
				audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
						AudioManager.ADJUST_RAISE, 0);
			} else {
				return;
			}
			break;
		case R.id.btn_low:
			int volume = audioManager
					.getStreamVolume(AudioManager.STREAM_MUSIC);
			if (volume > 0) {
				audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
						AudioManager.ADJUST_LOWER, 0);
			} else {
				return;
			}
			break;

		default:
			break;
		}

	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		// TODO Auto-generated method stub
		super.onSaveInstanceState(outState);
		if (mediaPlayer != null && mediaPlayer.isPlaying()) {
			outState.putInt("position", mediaPlayer.getCurrentPosition());
		}
	}

	@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onRestoreInstanceState(savedInstanceState);
		if (savedInstanceState.containsKey("position")) {
			position = savedInstanceState.getInt("position");
		}
	}

	// 视频播放
	private void playMedia() {
		try {
			File file = new File(Environment.getExternalStorageDirectory(),
					"can_you_feel_my_world.mp4");
			mediaPlayer.reset();
			mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
			mediaPlayer.setDataSource(file.getAbsolutePath());
			mediaPlayer.setDisplay(surfaceView.getHolder());
			mediaPlayer.prepare();
			mediaPlayer.start();
			mediaPlayer.seekTo(position);
			position = 0;

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private class SurceCallBack implements SurfaceHolder.Callback {

		@Override
		public void surfaceCreated(SurfaceHolder holder) {
			// TODO Auto-generated method stub
			if (position > 0) {
				try {
					playMedia();
					position = 0;
				} catch (Exception e) {
					// TODO: handle exception
					e.printStackTrace();
				}
			}
		}

		@Override
		public void surfaceChanged(SurfaceHolder holder, int format, int width,
				int height) {
			// TODO Auto-generated method stub

		}

		@Override
		public void surfaceDestroyed(SurfaceHolder holder) {
			// TODO Auto-generated method stub
			if (mediaPlayer.isPlaying()) {
				mediaPlayer.stop();
			}
			mediaPlayer.release();
		}

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

}



activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <SurfaceView
        android:id="@+id/surface"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_weight="0.15" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0.85"
        android:background="@android:color/background_dark"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btn_play"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="开唱"
            android:textSize="12dp" />

        <Button
            android:id="@+id/btn_pause"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="暂停"
            android:textSize="12dp" />

        <Button
            android:id="@+id/btn_stop"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="停止"
            android:textSize="12dp" />

        <Button
            android:id="@+id/btn_low"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.9"
            android:text="调低音量"
            android:textSize="10dp" />

        <Button
            android:id="@+id/btn_hight"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.9"
            android:text="调高音量"
            android:textSize="10dp" />
    </LinearLayout>

</LinearLayout>



manifest.xml:

    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
分享到:
评论

相关推荐

    android surfaceview示例源码下载

    android中的surfaceview示例源码下载,Android SurfaceView在游戏开发中使用想当广泛,SurfaceView对于画面的控制有着更大...所以今天就同Android编程新手共同分享这个简单的Android SurfaceView实例,并附上源码下载。

    android surfaceview 悬浮窗圆角 windowmanager

    在Android开发中,`SurfaceView`是一个特殊类型的`View`,它允许开发者在应用程序中创建一个独立于应用程序主线程的渲染表面。`SurfaceView`通常用于处理高性能的图形或者视频播放,因为它可以在单独的线程中进行...

    Android SurfaceView 实现实时显示摄像头视频

    我们需要通过`SurfaceView.getHolder()`获取`SurfaceHolder`实例,并注册回调以便在Surface准备好时进行操作。 ```java SurfaceView surfaceView = findViewById(R.id.surface_view); SurfaceHolder holder = ...

    Android SurfaceView使用Demo

    **Android SurfaceView 使用详解** `SurfaceView` 是 Android 系统提供的一种特殊的视图组件,它允许开发者在应用程序中创建高性能的图形界面,比如游戏、视频播放器等需要连续更新图像的应用。`SurfaceView` 提供...

    Android SurfaceView 多线程 滑块

    在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在单独的线程中进行绘制操作,从而提高图形渲染性能,特别适用于需要连续更新显示内容的应用,如游戏、视频播放等。本示例中,"Android SurfaceView 多...

    Android SurfaceView实现动画效果

    在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在单独的线程中进行高性能的图形绘制,常用于游戏或者视频播放等需要连续更新显示内容的场景。本篇文章将详细探讨如何利用SurfaceView实现动画效果,...

    SurfaceView实例

    SurfaceView是Android系统中一种特殊的View,主要用于处理高性能、低延迟的图形绘制,例如游戏引擎、视频播放等场景。在Android应用开发中,SurfaceView通过将渲染与UI更新线程分离,提供了更高效的性能表现。它创建...

    Android提高之SurfaceView的基本用法实例分析

    前文介绍了Android中MediaPlayer用法的时候稍微介绍了SurfaceView,SurfaceView由于可以直接从内存或者DMA等硬件接口取得图像数据,因此是个非常重要的绘图容器,这次我就来较为详细的介绍SurfaceView的用法。...

    android SurfaceView的基本用法

    创建SurfaceView时,你需要在布局XML文件中添加一个SurfaceView元素,或者在代码中通过`new SurfaceView(context)`实例化。为了监听SurfaceView的状态变化,如创建、销毁或重新布局,你可以设置`SurfaceHolder....

    最简单的surfaceview画图和截图

    SurfaceView是Android系统提供...综上所述,这个项目涵盖了SurfaceView的基本使用,包括创建、绘制以及截图等关键步骤,同时也涉及到Bitmap操作和用户交互,是一个很好的学习和实践Android图形处理和自定义视图的实例。

    SurfaceView实例源代码

    SurfaceView是Android系统提供的一种特殊的View,它在处理多媒体数据如视频播放、游戏动画等高性能图形操作时非常有用。SurfaceView拥有自己的Surface,这个Surface位于应用程序窗口的后台,可以直接进行硬件加速的...

    Android SurfaceView 游戏 flabby bird 完整代码

    主Activity创建SurfaceView实例,设置SurfaceHolder回调,并启动子线程进行游戏循环。同时,我们需要处理布局文件,确保SurfaceView在屏幕上正确显示。 总结,通过学习和实践这个Flabby Bird游戏,开发者不仅能掌握...

    android surfaceview 播放视频

    2. 初始化MediaPlayer:在`surfaceCreated()`方法中,创建一个MediaPlayer实例,设置数据源,准备播放,并将其绑定到SurfaceView。 ```java MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer....

    surfaceView实例 4-10

    下面我们将详细探讨SurfaceView在各个章节中的实例应用。 第04章:基础概念与创建 在这个章节,你会学习到SurfaceView的基本概念,包括它的工作原理和如何在布局文件中添加SurfaceView。创建SurfaceView通常涉及...

    android View、SurfaceView Demo

    View是Android UI的基础,几乎所有的可视元素,如按钮、文本框等,都是View或其子类的实例。它提供了基本的绘图功能,通过onDraw()方法来绘制内容。View的操作通常在主线程中进行,因此受到UI线程同步限制,不适合...

    Android游戏开发学习(2)--SurfaceView实例控制角色移动

    在Android游戏开发中,SurfaceView是一个非常重要的组件,它提供了高效、低延迟的图形渲染机制,特别适合用于游戏和实时视频等对性能要求...这就是"Android游戏开发学习(2)--SurfaceView实例控制角色移动"的主要内容。

    android surfaceView实现的触屏产生烟花程序

    在初始化SurfaceView时,我们需要通过`getHolder()`方法获取SurfaceHolder实例,并设置回调监听。 2. **Canvas绘制**: 在Surface准备好后(即SurfaceHolder的`surfaceCreated()`回调),我们可以在`onDraw()`方法中...

    SurfaceView增加放大缩小视频功能

    然后,在Java代码中,我们实例化`SurfaceView` 和 `MediaPlayer`: ```java SurfaceView surfaceView = findViewById(R.id.surface_view); MediaPlayer mediaPlayer = new MediaPlayer(); ``` 接着,我们需要配置 ...

    Android用Surfaceview模仿泡泡龙

    在Android平台上,SurfaceView是一种特殊的视图,常用于处理高性能的图形绘制,如游戏或视频播放。在这个项目“Android用SurfaceView模仿泡泡龙”中,开发者利用SurfaceView来构建一个基本的泡泡龙游戏。泡泡龙是一...

Global site tag (gtag.js) - Google Analytics