请教高手--关于气泡菜单的问题 有哪位兄弟做过上面这种带小三角的菜单,能不能给点思路或者能否提供点源码给小弟,不甚感激 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先将图片上传到csdn相册,再把相册中图片的地址放到插入图片的地址, 我目前也在做这样一个东西,我参考了下面的例子http://www.eoeandroid.com/thread-24780-1-1.html按你的需求这个例子就可以了,但我想在气泡出现的同时气泡中的菜单以“弹回”的动画出现,试了很多方法都不行,借你的帖子问下,希望大牛们指点! 具体可以查查 popwindow 的使用 可以把气泡菜单作为一个单独的view调用。 可以看看这个博文:android自定义menu,完全模拟系统事件然后将View改成自己想要的布局,以及自己想要的动画 首先前提就是你得是2.2版本的系统, 其次你必须已经root.下面说步骤:1. 下载附件, 解压里面的bootanimation并替换/system/bin里的同名文件(建议先备份该文件),注意改好权限(跟其他文件一样)2. 修改你的/system/media/bootanimation.zip教程很多, 只简单的提一下 (a)解压bootanimation.zip, 在里面的desc.txt最后另起一行一行加上"s boot.ogg"不带引号,然后按照原来的结构重新打包, 注意压缩格式选zip(仅储存) (b)把自己喜欢的开机音转成ogg格式(mp3没试过, 待更新), 命名为boot.ogg(注意大小写)并和刚才做好的bootanimation.zip一起放回/system/media/, 改好权限3. 重启就可以了, 开机第一次震动之后就会出现你的自定义音乐了 先将你要作为开机铃声的音乐文件转为.ogg格式 下载附件 soft-ogg-convert.zip。解压并安装 桌面新建一个文件夹,然后把开机音文件丢进去,然后都在左边的资源管理器里,找到你要转换的开机音文件夹点一下,然后右边会出现文件,右键单击文件 选择转换 然后它提示你注册什么的不用管它,然后选择输出目录 然后点开始转换 转换完了之后吧转换得到的文件重命名为 boot.ogg(一定要小写) 进入手机找到 /system/customize/CID/default.xml ,然后下载到你的电脑桌面,然后用IE浏览器打开在最下面找到这个内容<BootAnimation animation="/system/customize/resource/bootanimation.zip" audio="/system/customize/resource/android_audio.mp3" /> 使用SurfaceView播放视频,其实很简单,但是经常会碰见有声音没图像的问题.其实使用SurfaceView播放视频只需要主要下面几个地方就可以了1. surfaceChanged也就是Suface是否创建成功2. onPrepared 也就是MideoPlayer是否加载并准备完成3. surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 类型必须是SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERSjava代码: 1 package VideoTest.Test; 2 3 import java.io.FileDescriptor; 4 5 import android.app.Activity; 6 import android.content.res.AssetFileDescriptor; 7 import android.media.AudioManager; 8 import android.media.MediaPlayer; 9 import android.media.MediaPlayer.OnBufferingUpdateListener; 10 import android.media.MediaPlayer.OnCompletionListener; 11 import android.media.MediaPlayer.OnPreparedListener; 12 import android.os.Bundle; 13 import android.view.SurfaceHolder; 14 import android.view.SurfaceView; 15 16 17 public class VideoTest extends Activity implements SurfaceHolder.Callback, 18 OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener{ 19 20 private SurfaceView surfaceView; 21 private SurfaceHolder surfaceHolder; 22 private MediaPlayer mediaPlayer; 23 24 @Override 25 public void onCreate(Bundle savedInstanceState) { 26 super.onCreate(savedInstanceState); 27 28 this.surfaceView = new SurfaceView(this); 29 this.surfaceHolder = this.surfaceView.getHolder(); 30 this.surfaceHolder.addCallback(this); 31 32 //类型必须设置成SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS 33 this.surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 34 setContentView(this.surfaceView); 35 } 36 37 @Override 38 public void onDestroy() { 39 super.onDestroy(); 40 if (this.mediaPlayer != null) { 41 this.mediaPlayer.release(); 42 this.mediaPlayer = null; 43 } 44 } 45 46 public void PlayVideo(){ 47 48 try { 49 //视频文件放在 assert中 50 AssetFileDescriptor aFD = this.getAssets().openFd("welcome.3gp"); 51 FileDescriptor fileDescriptor = aFD.getFileDescriptor(); 52 this.mediaPlayer = new MediaPlayer(); 53 this.mediaPlayer.setDataSource(fileDescriptor, aFD.getStartOffset(), aFD.getLength()); 54 aFD.close(); 55 56 //视频放在SDCard中 57 //File sdFile = Environment.getExternalStorageDirectory(); 58 //this.mediaPlayer = new MediaPlayer(); 59 //this.mediaPlayer.setDataSource(sdFile.getAbsoluteFile() + File.separator + "welcome.3gp"); 60 61 //视频放在res中 62 //this.mediaPlayer = MediaPlayer.create(this, R.raw.welcome); 63 64 //网上的视频,没有测试 65 //this.mediaPlayer 66 // .setDataSource("http://xy2.163.com/download/down/wukong.mp3"); 67 68 this.mediaPlayer.setDisplay(this.surfaceHolder); 69 this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 70 //准备完成后才可以播放,另外如果文件特别大或者从网上获得的资源 71 //会在这里等待时间过长,造成堵塞,这样的话就得用 72 //this.mediaPlayer.prepareAsync(),然后监听是否准备完毕在开始 73 74 this.mediaPlayer.prepare(); 75 this.mediaPlayer.start(); 76 77 } catch (Exception e) { 78 // TODO: handle exception 79 } 80 } 81 82 @Override 83 public void surfaceChanged(SurfaceHolder holder, int format, int width, 84 int height) { 85 86 } 87 88 @Override 89 public void surfaceCreated(SurfaceHolder holder) { 90 //SurfaceCreated 创建成功才可以播放视频 91 PlayVideo(); 92 } 93 94 @Override 95 public void surfaceDestroyed(SurfaceHolder holder) { 96 97 } 98 99 //@Override100 public void onBufferingUpdate(MediaPlayer mp, int percent) {101 // TODO Auto-generated method stub102 103 }104 105 //@Override106 public void onCompletion(MediaPlayer mp) {107 // TODO Auto-generated method stub108 109 }110 111 //@Override112 public void onPrepared(MediaPlayer mp) {113 //MediaPlayer加载准备完毕才能开始播放114 //mp.start();115 }116 117 } Android MediaRecord 录像问题 小弟求安卓开发入门视频,谢谢啦 急啊!!!andriod里自定义listview 关于关卡页面的设计 SQLite构架代码应该如何编写?? android中"|="符号 android架构学习 很简单的问题:Google Maps Android API V2 求大神指导一下 关于 Android AppWidget(急) 继承Button类设置宽高的问题 如何关闭Service?
http://www.eoeandroid.com/thread-24780-1-1.html
按你的需求这个例子就可以了,但我想在气泡出现的同时气泡中的菜单以“弹回”的动画出现,试了很多方法都不行,借你的帖子问下,希望大牛们指点!
2. 修改你的/system/media/bootanimation.zip教程很多, 只简单的提一下
(a)解压bootanimation.zip, 在里面的desc.txt最后另起一行一行加上"s boot.ogg"不带引号,然后按照原来的结构重新打包, 注意压缩格式选zip(仅储存)
(b)把自己喜欢的开机音转成ogg格式(mp3没试过, 待更新), 命名为boot.ogg(注意大小写)并和刚才做好的bootanimation.zip一起放回/system/media/, 改好权限
3. 重启就可以了, 开机第一次震动之后就会出现你的自定义音乐了 先将你要作为开机铃声的音乐文件转为.ogg格式 下载附件 soft-ogg-convert.zip。解压并安装 桌面新建一个文件夹,然后把开机音文件丢进去,然后都在左边的资源管理器里,找到你要转换的开机音文件夹点一下,然后右边会出现文件,右键单击文件 选择转换 然后它提示你注册什么的不用管它,然后选择输出目录 然后点开始转换 转换完了之后吧转换得到的文件重命名为 boot.ogg(一定要小写)
在最下面找到这个内容<BootAnimation animation="/system/customize/resource/bootanimation.zip" audio="/system/customize/resource/android_audio.mp3" />
其实使用SurfaceView播放视频只需要主要下面几个地方就可以了
1. surfaceChanged也就是Suface是否创建成功
2. onPrepared 也就是MideoPlayer是否加载并准备完成
3. surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 类型必须是SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS
java代码:
1 package VideoTest.Test;
2
3 import java.io.FileDescriptor;
4
5 import android.app.Activity;
6 import android.content.res.AssetFileDescriptor;
7 import android.media.AudioManager;
8 import android.media.MediaPlayer;
9 import android.media.MediaPlayer.OnBufferingUpdateListener;
10 import android.media.MediaPlayer.OnCompletionListener;
11 import android.media.MediaPlayer.OnPreparedListener;
12 import android.os.Bundle;
13 import android.view.SurfaceHolder;
14 import android.view.SurfaceView;
15
16
17 public class VideoTest extends Activity implements SurfaceHolder.Callback,
18 OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener{
19
20 private SurfaceView surfaceView;
21 private SurfaceHolder surfaceHolder;
22 private MediaPlayer mediaPlayer;
23
24 @Override
25 public void onCreate(Bundle savedInstanceState) {
26 super.onCreate(savedInstanceState);
27
28 this.surfaceView = new SurfaceView(this);
29 this.surfaceHolder = this.surfaceView.getHolder();
30 this.surfaceHolder.addCallback(this);
31
32 //类型必须设置成SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS
33 this.surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
34 setContentView(this.surfaceView);
35 }
36
37 @Override
38 public void onDestroy() {
39 super.onDestroy();
40 if (this.mediaPlayer != null) {
41 this.mediaPlayer.release();
42 this.mediaPlayer = null;
43 }
44 }
45
46 public void PlayVideo(){
47
48 try {
49 //视频文件放在 assert中
50 AssetFileDescriptor aFD = this.getAssets().openFd("welcome.3gp");
51 FileDescriptor fileDescriptor = aFD.getFileDescriptor();
52 this.mediaPlayer = new MediaPlayer();
53 this.mediaPlayer.setDataSource(fileDescriptor, aFD.getStartOffset(), aFD.getLength());
54 aFD.close();
55
56 //视频放在SDCard中
57 //File sdFile = Environment.getExternalStorageDirectory();
58 //this.mediaPlayer = new MediaPlayer();
59 //this.mediaPlayer.setDataSource(sdFile.getAbsoluteFile() + File.separator + "welcome.3gp");
60
61 //视频放在res中
62 //this.mediaPlayer = MediaPlayer.create(this, R.raw.welcome);
63
64 //网上的视频,没有测试
65 //this.mediaPlayer
66 // .setDataSource("http://xy2.163.com/download/down/wukong.mp3");
67
68 this.mediaPlayer.setDisplay(this.surfaceHolder);
69 this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
70 //准备完成后才可以播放,另外如果文件特别大或者从网上获得的资源
71 //会在这里等待时间过长,造成堵塞,这样的话就得用
72 //this.mediaPlayer.prepareAsync(),然后监听是否准备完毕在开始
73
74 this.mediaPlayer.prepare();
75 this.mediaPlayer.start();
76
77 } catch (Exception e) {
78 // TODO: handle exception
79 }
80 }
81
82 @Override
83 public void surfaceChanged(SurfaceHolder holder, int format, int width,
84 int height) {
85
86 }
87
88 @Override
89 public void surfaceCreated(SurfaceHolder holder) {
90 //SurfaceCreated 创建成功才可以播放视频
91 PlayVideo();
92 }
93
94 @Override
95 public void surfaceDestroyed(SurfaceHolder holder) {
96
97 }
98
99 //@Override
100 public void onBufferingUpdate(MediaPlayer mp, int percent) {
101 // TODO Auto-generated method stub
102
103 }
104
105 //@Override
106 public void onCompletion(MediaPlayer mp) {
107 // TODO Auto-generated method stub
108
109 }
110
111 //@Override
112 public void onPrepared(MediaPlayer mp) {
113 //MediaPlayer加载准备完毕才能开始播放
114 //mp.start();
115 }
116
117 }