小编Dan*_* L.的帖子

java.lang.IllegalArgumentException:pointerIndex超出范围异常 - dispatchTouchEvent

我在自定义视图中有这个方法,它扩展了FrameLayout:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    int currentItem = vp.getCurrentItem();
    if (inDragPanelZone(currentItem, ev.getX(), ev.getY()) && ev.getAction() == MotionEvent.ACTION_DOWN) {      
        if (!shouldAllowPaging()) { 
            return true; 
        }
        vp.setPagingEnabled(true);
    }
    return super.dispatchTouchEvent(ev);
}
Run Code Online (Sandbox Code Playgroud)

偶尔 - 我得到以下例外:

java.lang.IllegalArgumentException: pointerIndex out of range
at android.view.MotionEvent.nativeGetAxisValue(Native Method)
at android.view.MotionEvent.getX(MotionEvent.java:1995)
at android.support.v4.view.MotionEventCompatEclair.getX(MotionEventCompatEclair.java:32)
at android.support.v4.view.MotionEventCompat$EclairMotionEventVersionImpl.getX(MotionEventCompat.java:86)
at android.support.v4.view.MotionEventCompat.getX(MotionEventCompat.java:210)
at android.support.v4.view.ViewPager.onTouchEvent(ViewPager.java:1734)
at android.view.View.dispatchTouchEvent(View.java:5710)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1951)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1712)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
at MyView.dispatchTouchEvent(DraggablePane.java:176)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1918) …
Run Code Online (Sandbox Code Playgroud)

android android-view

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

Google Play Alpha/Beta测试链接已损坏

我已经在开发者控制台上传的APK文件到Alpha测试选项卡,并添加了谷歌组我的Alpha测试人员.当尝试输入生成的URL时,我得到页面未找到错误(404).

是否与我的应用仍处于草稿模式这一事实相关?

android google-play android-testing google-play-services

29
推荐指数
0
解决办法
4万
查看次数

片段作为Android中的单身人士

一般问题 我可以将碎片定义为单身人士吗?

具体问题 在我的应用程序中,我有一个'FragmentActivity',FragmentPager其中有一个有两个片段,FragmentAFragmentB.

我在FragmentAextends Fragment类中将片段定义为单例:

private static instance = null;

public static FragmentA getInstance() {
    if (instance == null) {
        instance = new FragmentA();
    }   
    return instance;
}
private FragmentA() {}
Run Code Online (Sandbox Code Playgroud)

在我的FragmentPagerAdapter:

@Override
public Fragment getItem(int position) {
    switch(position){
    Fragment fragment = null;
    case 0:
        fragment = FragmentA.getInstance(); 
        break;
    case 1:
        fragment = FragmentB.getInstance(); 
        break;
    }
    return fragment;
}
Run Code Online (Sandbox Code Playgroud)

这就是我如何夸大片段布局:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager android-fragmentactivity

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

防止我的Android应用程序的多个实例由单个活动组成

我有一个由单个组成的Android应用程序Activity.我怎样才能确保Activity在给定时间内只存在一个应用程序实例(== )?我遇到了一种情况,我通过多次点击应用程序图标成功打开了我的应用程序的多个实例(这不会一直重现).

android android-lifecycle android-activity

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

我应该在销毁活动时手动关闭由我的应用程序创建的HandlerThreads吗?

我的应用程序由一个单独组成Activity.在这个活动中,我正在创建多个HandlerThreads,它们在循环中运行以执行套接字阻塞操作.

目前我HandlerThread在我的期间向这些人发布了一条戒烟信息Activity.onDestroy().

有时,当我打开我的应用程序,关闭它并重新启动它时,它会崩溃(很多时候是由于向未运行的处理程序线程发送消息).

我的问题是:关闭我的应用程序时关闭的正确方法HandlerThread什么(请注意,那些线程可能在套接字操作上阻塞).

编辑:更多信息: 我有一个处理程序线程池,它是在onCreate中启动的(当我第一次启动我的应用程序时没问题).

每个处理程序runnable循环都包含一个

 if (shouldRun) {
//body
} 
else { 
 close();
}
Run Code Online (Sandbox Code Playgroud)

声明.

close方法删除所有挂起的消息和runnables,并向处理程序发送一条消息,使其调用它looper.quit().这样,如果当前处理程序线程被IO操作阻止,只有一旦它完成它,他将退出().

android activity-lifecycle android-handler

9
推荐指数
1
解决办法
8388
查看次数

Canvas.drawText()如何真正绘制文本?

在这个方法文档中,它写道:

x   The x-coordinate of origin for where to draw the text
y   The y-coordinate of origin for where to draw the text
Run Code Online (Sandbox Code Playgroud)

但它没有说明这个文本的方向.我知道文本是从原点开始绘制的,但是当我给出以下参数时,我的文本会被删除:

canvas.drawText(displayText, 0, canvas.getHeight(), textPaint);
Run Code Online (Sandbox Code Playgroud)

另外,假设我正在使用Align.LEFT(意味着文本被绘制在x,y原点的右侧)

那么正确的论点应该是什么(假设我不想使用固定数字)?

android android-custom-view android-canvas

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

编译版本与最低要求版本Android

在我的自定义视图中,我使用的方法drawTextOnPath(...)在4.1之前不支持硬件加速.

所以我想添加一个if语句,在运行时检查当前的Android版本,如果此版本大于或等于4.1,则打开硬件加速.我的问题是我使用Android 4.0 SDK(这是我的最低版本)编译我的项目,所以我没有Build.VERSION_CODESAndroid 4.1.

虽然我的最低版本是4.0,但我应该用4.1编译我的项目吗?

android android-version android-custom-view

4
推荐指数
1
解决办法
685
查看次数

如何在Android ScrollView中启用Scale,以防止滚动它并点击它的子项目?

我有一个扩展Android ScrollView的自定义视图.直接子项是一种相对布局,其中包含可单击的子项.我希望能够:

  1. 在滚动视图上检测onScale手势(比我将手动管理项目的比例).
  2. 垂直滚动ScrollView.
  3. 保持这些子项可点击.

到目前为止我尝试的是(伪代码):

public class CustomView extends ScrollView { 
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {  
        return super.onInterceptTouchEvent(ev) || mScaleDetector.onTouchEvent(ev);
    }

   @Override
   public boolean onTouchEvent(MotionEvent ev) {
       return mScaleDetector.onTouchEvent(ev);
   }

    private class ScaleListener extends
        ScaleGestureDetector.SimpleOnScaleGestureListener {

            @Override
            public boolean onScale(ScaleGestureDetector detector) {
                // Handle the scale..
                return true;
            }
       }
}
Run Code Online (Sandbox Code Playgroud)

我还尝试了onInterceptMethod的不同配置,例如首先调用super并返回mScaleDetector.onTouchEvent等等.

我成功拦截了比例或点击和滚动,但不是两者.

谢谢,丹尼尔

android multi-touch scrollview gesturedetector

3
推荐指数
1
解决办法
3049
查看次数