第一部分在 "用户界面和多媒体"版面问题整理[j2medev.com][不断更新中]。下面是后续更新的部分。
全部目录为:
1 全屏问题
2 Image和ByteArray转换问题
3 getRGB问题
4 字符串换行问题
5 字体问题
6 重新播放音乐问题
7 MediaException问题
8 混音问题
9 CustomItem问题
8 混音问题
player/mixer
关键词
详细描述
Moto真机上如何在播放背景音乐的时候再播放音效?
“摩托罗拉V300-V500-V600同时播放音乐的讲究:
唯一支持的同步播放音乐的办法是,midi和wav声音混合播放。
即使是这样,也存在着一个限制:
应用程序必须先播放midi(可以作为背景音乐),然后再播放wav;wav文件还必须是以下的格式:
PCM 8000KHZ;
8Bit;
Mono。
除了上面这种方法,只要是一个新的media被播放,上一个Player必须被停止而且释放资源。”
--moto文档
“MOTO系列手机中JAVA程序播放一个声音文件比较简单,但是用于交互式音效时就有问题了。
根据MOTO的一些资料显示,在MOTO手机中播放声音有下面几条约束:
1、除了同时播放一个MIDI和一个WAV以外,MOTO手机无法同时播放多个声音,而且必须是先播放MIDI然后播放WAV;
2、除了MIDI或音阶序列以外,不能同时实现player的多个实例进入prefetched状态(预读取声音流);
3、播放新的声音之前,前一个player必须停止并释放资源(stop();deallocate())。
如果你遇到以下问题,可以试试我的解决方法:
1)只能播一次,或几次,接着就无法发出声音;
2)播放新的声音时,总是会多播放一次前一个声音。”
---linchangyu
nokia6230i上的MediaException现象
“当一个Player被prefetched,那么其他Player也就不再能够prefetched,除非它们都是midi或都是amr。
如果你没有在start/prefetch一个Player之前把其他的Player停下来,那么你将得到一个MediaException。”
-- 无名
9 CustomItem问题
CustomItem/repaint/traverse
关键词
详细描述
CustomItem的repaint
“repaint()产生重绘事件,在CustomItem里它有两个同名的方法,其中一个有四个参数,用来指定重画区的起始X、Y坐标,宽度和高度;另外一个没有参数,表示重画CustomItem的整个区域。paint()方法里的后两个参数也是宽度和高度,但是这两个方法的宽度和高度没有任何联系, paint方法里的W和H是Item内容区域的宽度和高度,并且只有这两个值大于0时,paint()方法才会被调用。”
--mydeman
“repaint()被调用之后会立刻返回,而调用paint()回调函数的工作会有另外一个专门处理UI的线程来完成。因此如果希望得到paint()方法完成后再返回,那么就可以在repaint()之后立刻调用serviceRepaint(),来强制队列中重绘事件快点完成。”
--- mydeman
CustomItem上处理过左右上下方向键
“由于我的CustomItem控件和一个Gauge控件同处于一个Form上,所以按上下左右键的时候,实际上被Form处理了,Form就认为上下左右键是在切换控件的焦点,而不会把这个按键事件传给我的CustomItem了。也就是说,我的写法一样不会得到上下左右键的按键事件。”
-- zhengyun
“一部手机是否实际支持CustomItem internal traversal,需要向getInteractionModes()方法查询才可知道,因为这是隐含的策略,并不是一定的。听说,在Nokia真机上,traverse好像并不好使用。
在我这里,这段代码在模拟器上能够使用,在真机上我不敢保证:
以下内容为程序代码:
protected boolean traverse(int dir,int viewportWidth,
int viewportHeight,int visRect_inout[])
{
System.out.println("Enter traverse");
if(dir == Canvas.UP){
System.out.println("traverse>>Press Up key!");
return true;
}else if(dir == Canvas.DOWN){
System.out.println("traverse>>Press Down key!");
return true;
}else if(dir == NONE){
System.out.println("traverse>>Press None key!");
return true;
}
return false;
}
protected void traverseOut(){
System.out.println("Enter traverse out");
}”
-- zhengyun
“protected boolean traverse(int dir, int viewportWidth, int viewportHeight, int[] visRect_inout) {
switch (dir) {
case Canvas.DOWN:
if (location == UPPER) {
location = IN;
} else {
repaint();
location = LOWER;
return false;
}
break;
case Canvas.UP:
if (location == LOWER) {
location = IN;
} else {
repaint();
location = UPPER;
return false;
}
break;
case Canvas.LEFT:
System.out.println("LEFT");
break;
case Canvas.RIGHT:
System.out.println("RIGHT");
break;
}
return true;
}
实际上在FORM里的左右键事件,也被用来处理焦点,只不过在CUSTOM ITEM里左右键没有响应,用上下键来处理焦点事件了。”
---hebaochen