我基本上试图从系统覆盖中获取所有触摸事件数据,根据此触摸数据移动我的精灵,然后允许操作系统/主屏幕/浏览器按照应有的方式对数据进行操作(反之亦然).我发现了类似的问题,但没有任何东西可以引导我到任何我未曾去过的地方:
(已实现,结果如下) 创建系统覆盖窗口(始终在顶部)
我可以做什么:
我可以通过移动我的精灵并且不允许操作系统/主屏幕/浏览器看到它们中的任何一个来抓住所有触摸事件并对其进行操作,或者我可以允许触摸事件通过并且仅获得"TOUCH_OUTSIDE"我的应用程序要采取行动.
我未实现的目标:
我不能为我的生活找到一种方法来同时处理数据.我无法实现的唯一方法是:拦截我的APP中的数据并将其传递到OS/homescreen/browser以使用允许OS/homescreen/browser首先获取数据,然后以某种方式获取信息回调允许操作系统/主屏幕/浏览器获取数据,对数据进行操作,并轮询他们的滚动/位置值,以便在我的APP中对其进行操作.
我担心这是不可能的,我想我在某些文档中读到了一些我现在无法找到的内容:"无论是全部还是全无,您的视图都可以获取所有事件,或者都不是"
(为了避免混淆,我并不是说我有两个视图.我的意思是我有一个视图通过覆盖操作系统/主屏幕/浏览器的活动/服务来控制.如果你愿意,就像一块玻璃.)
感谢您提供的任何有用信息,非常感谢!
[更新]在下面的问题上发表我自己的文档,以免混淆.
据我所知(并非我是正确的)当应用程序完成后,Drawable通常会从内存中正确删除.但是,位图需要手动回收,有时甚至会编写一个特殊的类来正确处理它们.我的问题是,关于内存和泄漏,简单地坚持像这样的Drawables是更有利的:
myView.setBackgroundDrawable(getResources().getDrawable(R.drawable.my_image));
myView1.setBackgroundDrawable(getResources().getDrawable(R.drawable.my_image1));
myView2.setBackgroundDrawable(getResources().getDrawable(R.drawable.my_image2));
Run Code Online (Sandbox Code Playgroud)
而不是使用Bitmaps这样的东西:
Bitmap tmpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
myView.setImageBitmap(tmpBitmap);
tmpBitmap.recycle();
tmpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image1);
myView1.setImageBitmap(tmpBitmap);
tmpBitmap.recycle();
tmpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image2);
myView2.setImageBitmap(tmpBitmap);
tmpBitmap.recycle();
Run Code Online (Sandbox Code Playgroud)
我当然也读过你必须要小心bitmaps上的recycle()方法,因为它们可以在使用时删除吗?似乎这些问题不断出现在不同的形式,但我无法真正得到任何人的直接答案.一个人说在每次使用后重复使用Bitmap并回收,其他人说使用Drawables和unbindDrawables()方法(这是我一直在使用的):
private void unbindDrawables(View view) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,任何适用的见解都会非常受欢迎.谢谢
onPause()每当按下后退按钮时,我的理解,显然是错误的?现在在我的代码中我已经把这个onPause()事件:
@Override
protected void onPause(){
super.onPause();
if(!_END_GAME){
Builder _alert = new AlertDialog.Builder(this)
.setMessage("onPause, with game NOT over!");
_alert.setNeutralButton("OK.",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
arg0.dismiss(); // Kills the interface
System.runFinalizersOnExit(true);
finish();
}
});
_alert.setTitle("Your Score!");
_alert.show();
}
Run Code Online (Sandbox Code Playgroud)
}
现在的问题是,对话框没有启动任何一个,然后代码错误输出.我把对话框放在那里试图可视化onPause(调用的位置,并帮助我调试其他一些变量等.但就像我说的那样,它甚至都没有显示出来.任何想法为什么会这样?是否有onPause()按下后退按钮之前启动的功能?提前感谢您提供任何信息.
我一直在阅读和调查touchEvents,主要是因为我的GC在有长时间的触摸/滑动事件或许多触摸事件时爆炸.如果我不触摸手机,它就会像GC_EXPLICIT我从DDMS执行的前几个中看到的那样只是空闲~5个物体.然后我开始触摸屏幕并四处滑动,物体在13513个物体周围拍摄,实际上造成了GC_FOR_MALLOC超过100毫秒.这是我的简单测试代码,下面是dalvicvm标记的日志.如果您有变通办法或原因的文档,或者甚至可能只是对此进行另一次深入讨论,我将不胜感激!干杯,祝你好运.
[码]
public class testClass extends Activity implements IOnSceneTouchListener{
int numberOfTouches = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
}
@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
numberOfTouches++;
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
[logcat的]
06-28 15:24:55.317: DEBUG/dalvikvm(2501): GC_EXPLICIT freed 5 objects / 128 bytes in 53ms
06-28 15:24:55.903: DEBUG/dalvikvm(2501): GC_EXPLICIT freed 5 objects / 136 bytes in 59ms
06-28 15:24:56.708: DEBUG/dalvikvm(2501): GC_EXPLICIT freed 5 objects / 128 …Run Code Online (Sandbox Code Playgroud) 我现在很难过.我一直在环顾四周,试验音频比较.我已经找到了相当多的材料,并且大量引用了不同的库和方法.
到目前为止,我已经使用Audacity并导出一个名为"long.wav"的3分钟wav文件,然后将其前30秒分成一个名为"short.wav"的文件.我想在线上的某处我可以通过java在每个视觉上记录(log.txt)数据,并且应该能够在值中看到至少一些视觉上的相似性....这里是一些代码
主要方法:
int totalFramesRead = 0;
File fileIn = new File(filePath);
BufferedWriter writer = new BufferedWriter(new FileWriter(outPath));
writer.flush();
writer.write("");
try {
AudioInputStream audioInputStream =
AudioSystem.getAudioInputStream(fileIn);
int bytesPerFrame =
audioInputStream.getFormat().getFrameSize();
if (bytesPerFrame == AudioSystem.NOT_SPECIFIED) {
// some audio formats may have unspecified frame size
// in that case we may read any amount of bytes
bytesPerFrame = 1;
}
// Set an arbitrary buffer size of 1024 frames.
int numBytes = 1024 * bytesPerFrame;
byte[] …Run Code Online (Sandbox Code Playgroud) android ×4
touch ×2
audio ×1
back-button ×1
bitmap ×1
comparison ×1
drawable ×1
fft ×1
java ×1
memory ×1
overlay ×1
recycle ×1
touch-event ×1
wav ×1