2

作为一个更复杂的功能的一部分,我已经被困在显示一个圆圈在屏幕的某个点变得不透明的能力上。

我已经创建了一个测试项目,其中我的动画代码如下:

View mLongPressImage;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mLongPressImage = findViewById(R.id.onPressImage);

     findViewById(R.id.button).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                startAnimation(v.getX(), v.getY());
            }
        });
}

private AlphaAnimation onPressAnimation;

private void startAnimation(final float f, final float g) {
    Log.v("", "START");
    mLongPressImage.setX(f);
    mLongPressImage.setY(g);
    onPressAnimation = new AlphaAnimation(0f, 1f);
    onPressAnimation.setDuration(1000);
    onPressAnimation.setFillAfter(true);
    onPressAnimation.setFillEnabled(true);
    mLongPressImage.startAnimation(onPressAnimation);
}

记录显示正确的事件正在发生。

视图看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="PRESS ME" />

    <ImageView
        android:id="@+id/onPressImage"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="#000000"
        android:scaleType="fitXY"
        android:src="@drawable/shape_circle_onpress" />

</FrameLayout>

现在图像只是在 1 秒后出现在坐标处。

谁能指出这个极其简单的功能中隐藏的缺陷?

4

2 回答 2

1

上面的代码在技术上似乎是正确的,这就是为什么我在解决它时遇到了这么大的问题。

这个问题是由我使用setX()andsetY()Animation一起引起的 - 在我的 Xoom 平板电脑(运行 3.2 API 13)上,即使在切换到ScaleAnimation.

移除setX()setY()移除故障行为,就像切换到 Galaxy Nexus(运行 API 4.0 Icecream Sandwich)一样。设置hardwareAcceleratedtrue而不是删除setX()并且setY()也改善了问题(但没有完全解决它)。

如果有人知道这是为什么,我将非常乐意投票并更改此问题的已接受答案。在那之前,我将把它归结为一个脆弱的 Android API。

于 2012-07-09T09:23:47.257 回答
0

如果您对圆圈周围的黑色背景不满意,您可以将ImageView背景更改为以下(注意两个额外的零来描述 Alpha 通道值):

android:background="#00000000"

于 2012-07-06T16:15:36.177 回答