小编Whi*_*e-E的帖子

Android叠加来抓取所有触摸,然后传递它们?

我基本上试图从系统覆盖中获取所有触摸事件数据,根据此触摸数据移动我的精灵,然后允许操作系统/主屏幕/浏览器按照应有的方式对数据进行操作(反之亦然).我发现了类似的问题,但没有任何东西可以引导我到任何我未曾去过的地方:

获取正在接收所有触摸事件的视图

(已实现,结果如下) 创建系统覆盖窗口(始终在顶部)

我可以做什么:

我可以通过移动我的精灵并且不允许操作系统/主屏幕/浏览器看到它们中的任何一个来抓住所有触摸事件并对其进行操作,或者我可以允许触摸事件通过并且仅获得"TOUCH_OUTSIDE"我的应用程序要采取行动.

我未实现的目标:

我不能为我的生活找到一种方法来同时处理数据.我无法实现的唯一方法是:拦截我的APP中的数据并将其传递到OS/homescreen/browser以使用允许OS/homescreen/browser首先获取数据,然后以某种方式获取信息回调允许操作系统/主屏幕/浏览器获取数据,对数据进行操作,并轮询他们的滚动/位置值,以便在我的APP中对其进行操作.

我担心这是不可能的,我想我在某些文档中读到了一些我现在无法找到的内容:"无论是全部还是全无,您的视图都可以获取所有事件,或者都不是"

(为了避免混淆,我并不是说我有两个视图.我的意思是我有一个视图通过覆盖操作系统/主屏幕/浏览器的活动/服务来控制.如果你愿意,就像一块玻璃.)

感谢您提供的任何有用信息,非常感谢!

[更新]在下面的问题上发表我自己的文档,以免混淆.

android overlay touch touch-event

23
推荐指数
1
解决办法
2万
查看次数

可绘制与单个可重用位图更好的内存?

据我所知(并非我是正确的)当应用程序完成后,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)

但是,任何适用的见解都会非常受欢迎.谢谢

memory android bitmap recycle drawable

20
推荐指数
2
解决办法
1万
查看次数

按下后退按钮时没有调用onPause?

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()按下后退按钮之前启动的功能?提前感谢您提供任何信息.

android back-button

6
推荐指数
1
解决办法
7856
查看次数

Android:GC_FOR_MALLOC由漫长的触摸事件引起?

我一直在阅读和调查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)

android garbage-collection touch

6
推荐指数
1
解决办法
1374
查看次数

Wav比较,同一个文件

我现在很难过.我一直在环顾四周,试验音频比较.我已经找到了相当多的材料,并且大量引用了不同的库和方法.

到目前为止,我已经使用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)

java audio comparison fft wav

5
推荐指数
1
解决办法
2468
查看次数