小编And*_*yld的帖子

ScaleGestureDetector.OnScaleGestureListener.onScaleEnd()方法没有被击中

更新:我弄清楚发生了什么.看评论.

我正在尝试编写一个ViewSwitcher,它将所有手势传递给它的第一个孩子,直到它收到一个缩放手势; 然后它将它们传递给它的第二个孩子,直到那个孩子完全缩小,当它恢复到第一个孩子时.我的子类有一个ScaleGestureDetector,我做了一个非常简单的监听器:

    protected class OnScaleModeSwitcher implements ScaleGestureDetector.OnScaleGestureListener
    {
        protected PageFlipSwitcher owner;

        public OnScaleModeSwitcher(PageFlipSwitcher newOwner)
        {
            super();
            owner = newOwner;
        }

        @Override
        public boolean onScale(ScaleGestureDetector detector) {
            return false;
        }

        @Override
        public boolean onScaleBegin(ScaleGestureDetector detector) {
            owner.onScaleBegin();
//returning false here causes the rest of the gesture to be ignored.
            return false;
        }

        @Override
        public void onScaleEnd(ScaleGestureDetector detector) {
            owner.onScaleEnd();
        }
    }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它所做的就是在构造时引用所有者对象,然后将一些事件传递给所有者类中的方法.但是,代码未访问onScaleEnd().

我知道onInterceptTouchEvent可能有点冒险; 我尽可能地按照Android文档中的建议进行操作

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev)
    {
        onTouchEvent(ev);
        return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev)
    { …
Run Code Online (Sandbox Code Playgroud)

android callback scale gesturedetector

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

Toast.makeText(...).show()有时会错位

我正在使用Toast.makeText来显示对话框的结果并且有一个奇怪的问题:文本显示在应该保持它的框架上方,如下所示:

消息未与帧错位.请更好地对齐它.[ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ___ ]

我通常使用的代码看起来像

Toast bread = Toast.makeText(getContext(), R.string.message, Toast.LENGTH_LONG);
bread.show();
Run Code Online (Sandbox Code Playgroud)

从对话框.我听说不好的情况有时候会导致通货膨胀问题,但是getOwnerActivity()会返回null,所以就这样了.在任何情况下,我都认为getContext()会提供在构造时传递的上下文,无论如何都是活动.

有什么建议?

android alignment toast android-context

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

EditText 的子类不像 EditText

我写了一个EditText. 这是那个子类:

package com.package.foo;

import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.EditText;

public class FuturaEditText extends EditText{

    public FuturaEditText(Context context) {
        this(context, null, 0);
    }

    public FuturaEditText(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public FuturaEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        if(!isInEditMode()) {
            setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/futura.ttf"));
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

但它的行为不像EditText,而是TextView。特别是,软键盘没有聚焦并且没有EditText格式。为什么?

android subclass android-edittext

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

有没有办法在Android中访问标准的动画drawable?

我偶然发现了Android 2.2的所有drawable列表,这非常酷,并且包括对用于下载文件的动画帧的引用(stat_sys_download_anim0和其余的).其中有六个; 我想把它们用作一个AnimationDrawable,我可以通过指定来做

<animation-list android:id="download" android:oneshot="false">
    <item android:drawable="@android:drawable/stat_sys_download_anim0" android:duration="150" />
    <item android:drawable="@android:drawable/stat_sys_download_anim1" android:duration="50" />
    <item android:drawable="@android:drawable/stat_sys_download_anim2" android:duration="50" />
    <item android:drawable="@android:drawable/stat_sys_download_anim3" android:duration="50" />
    <item android:drawable="@android:drawable/stat_sys_download_anim4" android:duration="50" />
    <item android:drawable="@android:drawable/stat_sys_download_anim5" android:duration="50" />
</animation-list>
Run Code Online (Sandbox Code Playgroud)

但是,大概这样的drawable已经存在于标准的Android资源中...我只是找不到它.普通民俗可以使用吗?

animation android drawable

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

从onDraw()调用invalidate()会导致堆栈溢出吗?

经过多次努力,我已经确定一个SurfaceView不会做我想做的事情,即高于一些UI元素而不是其他元素.我还发现,绘制所有UI元素SurfaceView实际上比我试图替换的多层次结构慢得多.因此,我正在尝试View使用自己的动画编码onDraw().

我能想到的最简单的方法大致如下:

  1. 现在测量时间
  2. 执行有关动画状态的计算
  3. 呼叫 invalidate()
  4. 在那里画动画 onDraw()
  5. 回到1.

我已经有了一个nextFrame()来自my 的函数,SurfaceView它执行第1步和第2步,而draw函数实际上是微不足道的 - 单个路径.我可以nextFrame()打电话invalidate(),我可以onDraw()打电话nextFrame()来表示绘图已经完成,我们已经为下一帧做好了准备.不幸的是,我可以想象这会导致问题.

是否invalidate()直接调用onDraw()?我需要实现一个调用线程SurfaceView吗?

stack-overflow android invalidation ondraw

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

在超级构造函数完成之前,是否可以初始化java子类的私有final字段?

我有一对看起来像这样的课程;

public abstract class Class1 {

//...

    public Class1() {
        //...
        function2();
        //...
    }

    protected abstract void function2();

}

public class Class2 implements Class1 {

    private final OnSomethingListener mOnSomethingListener = new OnSomethingListener() {
        @Override
        onSomething() {
            doThatOtherThing();
        }
    }

    protected void function2() {
        //uses mOnSomethingListener
        //however mOnSomethingListener is null when this function is called from super()
        //...
    }

    public Class2() {
        super();
    }
}
Run Code Online (Sandbox Code Playgroud)

我假设监听器是null因为我有效地引用它super()并且它还没有实例化.但是,我想成功,final因为它确实如此.我可以让这个字段(监听器)及时初始化而不将它放在超类中(它不会使用监听器)吗?

java null construction super

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

PriorityQueue是否允许重新排序队列中已有的元素?

我希望增加或降低项目的优先级PriorityQueue:例如,我可能正在下载一长串图像,并突然希望第三十个具有最高优先级.

据我了解,poll()总是返回具有最低值的队列对象(由比较器确定).如果我可以降低一个项的值已经在队列中(例如,如果这个值由确定int在所述对象和我降低int值在一些其它功能),将它首先通过返回poll(),或者是其允许分选poll()至在插入时完成此操作(例如,通过将新队列元素向下列入列表直到它们达到"自然"深度)?

如果在a上完成PriorityBlockingQueue,是否会导致并发问题?

java priority-queue

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

是否可以重置Android文件的上次修改日期?

我正在为我们的软件编写清除功能,删除一个月内未使用过的所有图像文件.要做到这一点,我正在检查两件事:

  1. 文件的最后修改日期
  2. 对显示最近查看过的文件的数据库的查询.

查询比文件检查慢得多.因此,我希望能够在第一次检查失败的任何文件上重置上次修改日期,但是传递第二次,以便(例如)一个古老但经常使用的文件列表不会逐渐增加处理加载管理系统.

有没有办法做到这一点,而无需求助于原始(甚至可能更慢)的东西,比如将每个文件重命名为临时标签,然后自己?

android file last-modified

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

位置#distanceTo(位置)是否考虑了位置#getAccuracy()?

我想写一个LocationListener最精确,最精确的近期位置作为其位置.我打算在我的代码中使用此代码LocationListener:

    @Override
    public void onLocationChanged(Location location) {
        if(location.distanceTo(mLocation)>location.getAccuracy()){
            mLocation = location;
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果用户的旧位置位于新位置指示的"可能位置"的圆圈之外,我打算这样做是更新位置.因此,例如,如果我们的最后一次测量是GPS信号而新的测量是一个蜂窝塔,并且旧位置在蜂窝塔的范围内,我们不会更新; 另一方面,如果蜂窝塔距离足够远,我们就知道用户已移动并记录下来.

但是,该distanceTo(Location)函数表示它返回位置之间的近似距离(以米为单位).它是否已将准确性考虑在内?它会给我一个足够精确的数字让我以这种方式使用吗?

android location

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

当标题视图设置为View.GONE时,ListView不收缩

我有一个标题视图,ListView我想在不使用时隐藏.我已经包含了将其可见性设置为View.GONEView.VISIBLE取决于另一个控件的代码.

不幸的是,我试图展示和隐藏的视图正在布局,好像我正在设置它的可见性View.INVISIBLE- 也就是说,ListView即使它被隐藏也允许它的空间.我怎么能阻止这个?

我试过打电话requestLayout(),但没有任何效果.

我将在这里尝试一种建议的解决方案:

在ListView中隐藏页脚视图?

即,将我的标题包装在一个FrameLayout并让FrameLayout句柄布局改变,而不是ListView.

编辑:我发现当我添加一个ViewPager子类时,基本上会出现同样的错误,我已将其覆盖onMeasure(int widthMeasureSpec, int heightMeasureSpec)为标题视图:它被设计为在添加子项时再次ListView显示自己,但显示错误.LinearLayout然而,作为一个孩子,这工作得很好.

layout android listview

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