小编pre*_*bgg的帖子

Android:如何检测滚动何时结束

我正在使用GestureDetector.SimpleOnGestureListener的onScroll方法在画布上滚动一个大位图.当滚动结束时,我想重绘位图,以防用户想要进一步滚动...离开位图的边缘,但我看不到如何检测滚动何时结束(用户已抬起手指)从屏幕上).

e2.getAction()似乎总是返回值2,所以没有帮助.当压力似乎下降到0.13左右时,e2.getPressure似乎返回相当恒定的值(大约0.25)直到最后的onScroll调用.我想我可以发现这种压力减少,但这远非万无一失.

必须有更好的方法:请有人帮忙吗?

android smooth-scrolling android-canvas

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

每当打开AlertDialog.Builder对象时显示软键盘

我打开输入对话框的代码如下:

final AlertDialog.Builder alert = new AlertDialog.Builder(this);  
alert.setTitle("Dialog Title");  
alert.setMessage("Request information");  
LayoutInflater factory = LayoutInflater.from(this);
final View textEntryView = factory.inflate(R.layout.edittextautotextlayout, null);
final EditText inputBox = (EditText) textEntryView.findViewById(R.id.my_et_layout);
alert.setView(inputBox);
Run Code Online (Sandbox Code Playgroud)

这很好用,除了我必须在软键盘出现之前点击文本输入行.

按照这里给出的建议我尝试插入:

inputBox.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            alert.getWindow().setSoftInputMode( 
               WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

但Eclipse对象"没有为AlertDialog.Builder类型定义方法getWindow()".

似乎setOnFocusChangeListener代码适用于AlertDialog对象,但不适用于AlertDialog.Builder.我应该如何修改我的代码以使软键盘自动显示.

keyboard android android-edittext android-alertdialog

32
推荐指数
3
解决办法
3万
查看次数

在Android中平滑地滚动画布

我是Android的新手.

我正在我的视图的OnDraw(Canvas画布)方法中的Canvas上绘制位图,线条和形状.我正在寻找有关如何实现平滑滚动以响应用户拖动的帮助.我已经搜索但没有找到任何教程来帮助我.

Canvas的引用似乎表明,如果Canvas是从Bitmap构建的(比方说称为bmpBuffer),那么在Canvas上绘制的任何内容也会在bmpBuffer上绘制.是否可以使用bmpBuffer来实现滚动...也许可以将它复制回Canvas一次移动几个像素?但是如果我使用Canvas.drawBitmap将bmpBuffer绘制回Canvas移动几个像素,bmpBuffer会不会被破坏?因此,也许,我应该将bmpBuffer复制到bmpBuffer2,然后将bmpBuffer2绘制回Canvas.

一个更直接的方法是将线条,形状等直接绘制到缓冲区中Bitmap然后将该缓冲区(带有移位)绘制到Canvas上,但我可以看到各种方法:drawLine(),drawShape()等等不能用于绘制到Bitmap ...仅用于Canvas.

我可以有2幅画布吗?其中一个是从缓冲区位图构造的,仅用于绘制线条,形状等,然后缓冲区位图将被绘制到另一个Canvas中以便在View中显示?

我应该欢迎任何建议!

这里(和其他网站上)类似问题的答案是指"blitting".我理解这个概念,但在Android文档中找不到关于"blit"或"bitblt"的任何内容.Canvas.drawBitmap和Bitmap.Copy是Android的等价物吗?

android smooth-scrolling android-canvas

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

Android内存类型(RAM v内存)

在一个单独的线程中,我通过询问将文件复制到"内部存储器"的最佳方法来证明我对内存类型的无知,并且被告知这不是一个好主意,并且最好将文件读入"RAM" .我现在试图了解这两种类型的内存是如何相关的以及如何使用它们.

我理解"内部存储器被认为是用于存储APK,ROM图像等的闪存".

我的HTC Hero的规格说有"ROM:512MB,RAM:288MB",没有说明RAM是如何细分的.

在电话上,"设置" - >"SD和电话存储"页面只是指"SD卡"和"内部电话存储",后者只显示"可用空间"的一个数量.

Android 数据存储参考提到了"内部存储".这是"你可以保存文件"的地方.该页面还提到了我认为可以存储在"内部存储"中的SQLite数据库文件.但是,该页面似乎没有提供任何有关内部存储与另一种(可能是更动态的)类型之间的RAM细分的解释.

是否有一种动态划分总RAM(Hero上的288MB)为两个子部分,可以以不同的方式使用?如果是这样,在Android文档中的位置是这样解释的吗?

memory ram storage android

22
推荐指数
1
解决办法
7万
查看次数

Android:我可以为多个数据库文件使用一个SQLiteOpenHelper类吗?

我的应用程序使用两个数据库(单独的文件)为了处理这些数据库,我创建了两个扩展SQLiteOpenHelper的Helper类,每个数据库一个.

我现在要添加第三个数据库并想知道是否需要创建另一个Helper类(如果我使用了第4个和第5个数据库,我还需要更多Helper类),或者我可以使用相同的Helper类进行多个数据库?

我在尝试使用一个Helper类时遇到的问题是我无法看到如何将各个数据库文件的名称传递给Helper.目前,数据库的名称被硬编码为每个Helper类的静态字段,但是如果我只有一个Helper类,我需要能够在创建单独的Helper时将不同的名称传递给构造函数对象; 问题是SQLiteOpenHelper构造函数似乎只是由Android调用,只有一个参数:Context.

database sqlite android class-design

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

Android内存分配

我得到"位图大小超过VM预算"错误.我已经读过内存限制为16MB.在这个主题中, Romain Guy说"你只能为你的整个应用程序分配16 MB的内存".

但是,我的应用程序必须在达到该限制之前很久就会耗尽内存.所以我的问题是:如何为我的应用程序分配内存...如何增加我的应用程序的分配(最多16MB内)?

android memory-management

16
推荐指数
3
解决办法
5万
查看次数

Logagl中的libagl alphaPlaneWorkaround错误消息

我最近注意到,在调试应用程序时,LogCat报告了许多错误("E")消息,其中pid = 92,tag = libagl,Message ="使用alphaPlaneWorkaround".

重新绘制应用程序屏幕时会显示消息,例如滚动时.

我使用的是Android 2.1.我意识到这些消息在手机的声音和显示设置中打开动画后开始出现,测试表明如果选择了"所有动画"或"某些动画"选项,它们就会出现,如果我选择"没有动画".

是什么导致这些消息?他们是否在我的应用中指出了错误,或者是由操作系统引起的错误?

android logcat

15
推荐指数
1
解决办法
869
查看次数

Android:onDestroy()方法中的语句顺序

如果我重写我的主Activity的onDestroy()方法以便在旋转屏幕时回收位图,我应该在myBitmap.recycle()之前或之后调用super.onDestroy()吗?有关系吗?

android ondestroy

8
推荐指数
1
解决办法
1928
查看次数

已创建Android跟踪文件但零字节长

我试图按照此页面上的说明创建跟踪文件.我可以在DDMS中的文件资源管理器中看到该文件并将其拉到我的PC上,但它的长度为零字节.

有什么建议我可能做错了吗?

debugging android trace

7
推荐指数
1
解决办法
2679
查看次数

Android问题找出最近的最新GPS修复方法

我的应用使用LocationListener来跟踪当前位置.只要GPS提供商提供定期修复,这种方法效果很好.但是,我希望我的应用程序在用户不再可靠时提醒用户,因为此修复程序不再是最新的.因此我使用timeCheckHandler每隔几秒调用一次getLastKnownLocation.

我的问题是,即使经常收到准确的修复,通过将getTime()应用于getLastKnownLocation返回的位置返回的时间通常比System.currentTimeMillis()返回的当前时间早,通常大约20秒.

我通过向onLocationChanged(arg0)添加代码来记录修复时间(arg0.getTime())和当前时间(System.currentTimeMillis()),进一步调查了这个问题.我再次看到大约20秒的差异.

该代码目前如下:

    public void onLocationChanged(Location arg0) {
    mapview.handleLocationChanged(mapview, arg0.getLatitude(), arg0.getLongitude(), arg0.getBearing(), arg0.getAccuracy(), "GPS fix");
    addDebugNote("Fix received at time: "+Long.toString(arg0.getTime()/1000)+" Now: "+Long.toString((System.currentTimeMillis())/1000));
}
Run Code Online (Sandbox Code Playgroud)

和我的调试文件的典型输出读取:

Fix received at time: 1292091908 Now: 1292091928
Run Code Online (Sandbox Code Playgroud)

为什么我应该看到修复时间和当前系统时间之间的这种差异?

我是否必须接受大约20秒的差异是正常的?

time gps android gps-time

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