更新:我弄清楚发生了什么.看评论.
我正在尝试编写一个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) 我正在使用Toast.makeText来显示对话框的结果并且有一个奇怪的问题:文本显示在应该保持它的框架上方,如下所示:
消息未与帧错位.请更好地对齐它.[ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ___ ]
我通常使用的代码看起来像
Toast bread = Toast.makeText(getContext(), R.string.message, Toast.LENGTH_LONG);
bread.show();
Run Code Online (Sandbox Code Playgroud)
从对话框.我听说不好的情况有时候会导致通货膨胀问题,但是getOwnerActivity()会返回null,所以就这样了.在任何情况下,我都认为getContext()会提供在构造时传递的上下文,无论如何都是活动.
有什么建议?
我写了一个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 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资源中...我只是找不到它.普通民俗可以使用吗?
经过多次努力,我已经确定一个SurfaceView不会做我想做的事情,即高于一些UI元素而不是其他元素.我还发现,绘制所有UI元素SurfaceView实际上比我试图替换的多层次结构慢得多.因此,我正在尝试View使用自己的动画编码onDraw().
我能想到的最简单的方法大致如下:
invalidate()onDraw()我已经有了一个nextFrame()来自my 的函数,SurfaceView它执行第1步和第2步,而draw函数实际上是微不足道的 - 单个路径.我可以nextFrame()打电话invalidate(),我可以onDraw()打电话nextFrame()来表示绘图已经完成,我们已经为下一帧做好了准备.不幸的是,我可以想象这会导致问题.
是否invalidate()直接调用onDraw()?我需要实现一个调用线程SurfaceView吗?
我有一对看起来像这样的课程;
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因为它确实如此.我可以让这个字段(监听器)及时初始化而不将它放在超类中(它不会使用监听器)吗?
我希望增加或降低项目的优先级PriorityQueue:例如,我可能正在下载一长串图像,并突然希望第三十个具有最高优先级.
据我了解,poll()总是返回具有最低值的队列对象(由比较器确定).如果我可以降低一个项的值已经在队列中(例如,如果这个值由确定int在所述对象和我降低int值在一些其它功能),将它首先通过返回poll(),或者是其允许分选poll()至在插入时完成此操作(例如,通过将新队列元素向下列入列表直到它们达到"自然"深度)?
如果在a上完成PriorityBlockingQueue,是否会导致并发问题?
我正在为我们的软件编写清除功能,删除一个月内未使用过的所有图像文件.要做到这一点,我正在检查两件事:
查询比文件检查慢得多.因此,我希望能够在第一次检查失败的任何文件上重置上次修改日期,但是传递第二次,以便(例如)一个古老但经常使用的文件列表不会逐渐增加处理加载管理系统.
有没有办法做到这一点,而无需求助于原始(甚至可能更慢)的东西,比如将每个文件重命名为临时标签,然后自己?
我想写一个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)函数表示它返回位置之间的近似距离(以米为单位).它是否已将准确性考虑在内?它会给我一个足够精确的数字让我以这种方式使用吗?
我有一个标题视图,ListView我想在不使用时隐藏.我已经包含了将其可见性设置为View.GONE或View.VISIBLE取决于另一个控件的代码.
不幸的是,我试图展示和隐藏的视图正在布局,好像我正在设置它的可见性View.INVISIBLE- 也就是说,ListView即使它被隐藏也允许它的空间.我怎么能阻止这个?
我试过打电话requestLayout(),但没有任何效果.
我将在这里尝试一种建议的解决方案:
即,将我的标题包装在一个FrameLayout并让FrameLayout句柄布局改变,而不是ListView.
编辑:我发现当我添加一个ViewPager子类时,基本上会出现同样的错误,我已将其覆盖onMeasure(int widthMeasureSpec, int heightMeasureSpec)为标题视图:它被设计为在添加子项时再次ListView显示自己,但显示错误.LinearLayout然而,作为一个孩子,这工作得很好.