- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我不确定这是设备问题还是我的代码问题,但我使用相对布局和 ImageView 创建了一个简单的可拖动可排序列表。我这样做有非常具体的原因,这不是我的问题。
我遇到的问题是它偶尔会完全卡住我的应用程序。该项目将卡在拖动状态。如果我抬起手指,阴影(拖动)对象仍在屏幕上,如果我触摸屏幕,它会移动到那个位置。这将持续大约一分钟,然后我会收到一条错误消息,指出该应用程序没有响应,可以选择终止它或等待。 logcat 中唯一有用的位如下:
12-09 14:23:13.157: W/WindowManager(16415): Drag is in progress but there is no drag window handle.
然后当应用程序超时时,我将此视为错误
12-09 14:59:09.782: E/ActivityManager(16415): ANR in com.appname.appname (com.appname.appname/.MainActivity)
12-09 14:59:09.782: E/ActivityManager(16415): Reason: keyDispatchingTimedOut
我用谷歌搜索了这个错误消息,唯一的信息是有人没有拖动监听器,另一个人说这是设备触摸传感器跟不上。
理想情况下,我很乐意修复此错误并从一开始就防止它发生。它似乎主要发生在我快速拖动时,但我不能很好地要求我的用户不要快速拖动……对吧?
或者,有没有一种方法可以检测到拖动已卡住应用程序并中断拖动。就像在触摸监听器上设置一个计时器,如果一两秒内没有 drag_location 消息会中断拖动?计时器的东西我知道怎么做,但我不知道如何在它卡住时强制停止拖动。有什么想法吗?
代码如下:
设置
//happens once when the app loads
RelativeLayout trackList = (RelativeLayout) findViewById(R.id.nsTrackList1);
trackList.setOnDragListener(new MyTrackDragListener(this));
//happens in a loop for each "track" (image view)
trackButton = new ImageView(this);
trackButton.setImageDrawable(nsPackages[trackId].banner[bannerSizeSelector]);
trackButton.setOnTouchListener(new MyTrackTouchListener());
触摸
public class MyTrackTouchListener implements OnTouchListener {
boolean isDragging=false;
float prevX, prevY;
public boolean onTouch(View view, MotionEvent motionEvent) {
if(motionEvent.getPointerCount() < 2 && !isDragging) return false;
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
isDragging=false;
prevX=0;
prevY=0;
return true;
} else if (motionEvent.getAction() == MotionEvent.ACTION_MOVE) {
if(isDragging) return true;
boolean wasFirst = (prevX == 0 || prevY == 0);
float theTotalDiff = Math.abs(prevX - motionEvent.getX()) + Math.abs(prevY - motionEvent.getY());
prevX=motionEvent.getX();
prevY=motionEvent.getY();
if(wasFirst) return true;
if(theTotalDiff <3) return true;
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
int thisViewId = view.getId();
//hide view
view.setVisibility(View.GONE);
isDragging=true;
return true;
} else if (motionEvent.getAction() == MotionEvent.ACTION_UP || motionEvent.getAction() == MotionEvent.ACTION_CANCEL) {
isDragging=false;
return true;
}else {
Integer thisAction = motionEvent.getAction();
Log.d("looper","Motion action: "+thisAction.toString());
return false;
}
}
}
拖拽
class MyTrackDragListener implements OnDragListener {
public static boolean isDragging=false;
private MainActivity parent;
public MyTrackDragListener(MainActivity myAct){
parent=myAct;
}
@Override
public boolean onDrag(View v, DragEvent event) {
int action = event.getAction();
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
isDragging=true;
// do nothing
return true;
case DragEvent.ACTION_DROP:
View view = (View) event.getLocalState();
parent.doDropSort(view,(int) event.getY());
return true;
case DragEvent.ACTION_DRAG_ENDED:
if(isDragging && event.getResult()==false){
View view2 = (View) event.getLocalState();
parent.doDropSort(view2,(int) event.getY(),true);
return true;
}
isDragging=false;
break;
case DragEvent.ACTION_DRAG_LOCATION:
parent.doDragHover((int) event.getY());
return true;
default:
Log.d("looper","drag other... "+String.valueOf(event.getAction()));
}
return false;
}
}
一些我已经尝试过的东西
相同的结果。拖放在大约 70% 的时间内完美运行,然后突然出现上述卡住行为。有时是在第一次拖动时,有时是在几次之后。除了可能 拖动速度外,我注意到一致的模式。这似乎通常发生在我快速拖动时,但拖动方向或拖动到的位置似乎并不重要。
最佳答案
耶!我想到了。这是答案,以防将来对某人有所帮助。
我最终将它缩小到只有顶部列表项(不知道我是怎么错过的)然后开始注释行直到它没有中断,从而将它缩小到这一行:
view.setVisibility(View.GONE);
我的列表设置每个项目的方式在相对布局中使用下面的布局属性(顶部项目除外)。一旦我从 View 中删除了最上面的项目,第二个到最上面的项目就在一个可见性消失的项目下面,所以它不知道该怎么做。解决方案是在 View 中设置下一项的参数。幸运的是,我手动设置了我的轨道按钮的 View ID(还有其他滚动的 View ......标签等)所以它们是顺序的。所以我的解决方法是简单地找到带有 id+1 的项目,并通过像这样将 BELOW 设置为零使其成为最上面的项目...
// the top item in my list is ALWAYS view id 1
if(thisViewId == 1){
ImageView nextTrackButton = (ImageView) trackList.findViewById(thisViewId+1);
LayoutParams ntLP = (LayoutParams) nextTrackButton.getLayoutParams();
ntLP.addRule(RelativeLayout.BELOW,0);
nextTrackButton.setLayoutParams(ntLP);
}
//hide view
view.setVisibility(View.GONE);
关于Android/kindle 拖拽时偶尔卡顿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20482859/
我正在写一本图表很多,文字很少的书。 我已尝试上传 PDF,但 Kindle 似乎会尝试对我的 PDF 进行 OCR,然后根据其所在的设备自动调整大小。 使用 Kindle Developer Kit
我很好奇人们是如何为 Kindle 制作阅读 Material 的。它需要编程知识吗?我想也许是 HTML 或 XML 或其他什么?有什么软件可以处理所有事情吗?如果我想制作一本杂志供人们使用 Kin
有人找到了从 Kindle PC 复制代码的好方法吗? 我刚刚第一次将编程书籍下载到 Kindle PC。书中的代码格式非常好,我想将代码直接从 Kindle PC 书中复制到 Visual Stud
有没有办法以编程方式检索用户已购买的 Kindle 电子书列表? 我已经在 SO 上广泛搜索了答案,但是我能找到的几个相关问题都是古老的。亚马逊文档也不是很有帮助,因为据我所知,亚马逊联盟计划 API
我是 Kindle 开发新手,我想知道 Amazon AZW 格式和 Mobipocket MOBI 格式之间是否存在代码级别差异。 据我了解,AZW 只是 Mobipocket 格式的 DRM 添加
Kindle Development Kit 应用程序可以通过 USB 读写放在 kindle 上的文件吗? 我的程序几乎会做以下事情 1.用户/主管使用 USB 在设备上放置一个 xml 或 jso
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 8年前关闭。 Improve this questi
我喜欢stackoverflow,也喜欢我的新Kindle,并且希望缩小差距。 有人设计出一种聪明的方法来做到这一点吗? 免责声明:是的,我知道从技术上讲这不是编程问题,但是这里总是有很多东西我想阅读
获得Kindle Development Kit所需的项目建议有多集中? 从亚马逊的Request Access页面: Briefly describe the active content appl
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 7年前关闭。 Improve this qu
亚马逊 Kindle 商店的一些书籍或期刊有这个很酷的功能,当你阅读它们时会显示面包屑或标题栏。它显示为文本的第一行。它不是具有电池和无线信号图标的酒吧。它是下面的第一行,就在内容的正上方。 例如,如
我制作了一本书,每一页都是一张 JPG 图片(相信我,这就是这本书的目的)。本书适合横向阅读。 这将是一本 kindle 书,适用于所有 kindle 平台(kindle 1、kindle 2、iph
我不确定这是设备问题还是我的代码问题,但我使用相对布局和 ImageView 创建了一个简单的可拖动可排序列表。我这样做有非常具体的原因,这不是我的问题。 我遇到的问题是它偶尔会完全卡住我的应用程序。
我使用 Kindle 作为嵌入式系统的示例来说明我在论文中提出的一些观点。由于我不是所使用的所有技术的专家,知道这些技术的人能否指出来。 例如: GUI 是用嵌入式 Java 编程的(这可能是一个糟糕
我有一个 Android 应用程序,我想在亚马逊的 AppStore 上提供。我的应用程序有一些基于位置的功能和相机功能,如果用户的设备是 Kindle,我需要禁用这些功能。有没有办法以编程方式检测用
我正在开发一个针对 Kindle Fire 的杂志阅读器应用程序。在横向模式下,Kindle 操作系统中的内置软键栏和状态栏几乎没有给我的内容留出空间,因此我选择使用以下 Activity 主题以全屏
有什么方法可以更改分辨率或为亚马逊 Kindle 键盘上的屏幕设置不同的边界?我的屏幕有一部分出现裂纹,我想解决这个问题。 我试过在文件系统中乱搞(通过 WiFi 连接),但我的所有属性更改都没有任何
有谁知道如何检测该应用程序是否在Kindle Fire上运行? 如果在Kindle Fire上运行,我的应用程序需要关闭一些功能,并且我想使用与Google Marketplace相同的版本。 最佳答
使用新的HTML音频标签: Your browser does not support the audio element. 在我尝试过的所有浏览器(IE v10,Chrome v23,O
有谁知道新的语言/平台是什么Kindle SDK会支持吗? 最佳答案 Kindle 开发套件 (KDK) 基于 Java。来自 FAQ : What APIs are available to me
我是一名优秀的程序员,十分优秀!