如何在动画后恢复/初始化视图状态?

3
如标题所述,我需要重置一个视图,其中包括TextViewImageView和其他内容,使其恢复到初始状态。例如,触摸该特定视图后,会播放一个动画,然后它的动画会销毁(在视觉上)该视图。

现在我需要重新绘制它。希望你明白我的意思。此外,我已经使用了https://github.com/tyrantgit/ExplosionField的ExplosionField效果。我已经运行了代码,它可以工作。

以下是代码:

private ExplosionField mExplosionField;
private TextView tv_1;

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

    tv_1 = (TextView)findViewById(R.id.mytext_xml);
    mExplosionField = ExplosionField.attach2Window(this);
    addListener(findViewById(R.id.root));

}

private void addListener(View root) {
    // TODO Auto-generated method stub
    if (root instanceof ViewGroup) {
        ViewGroup parent = (ViewGroup) root;
        for (int i = 0; i < parent.getChildCount(); i++) {
            addListener(parent.getChildAt(i));
        }
    } else {
        root.setClickable(true);
        root.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mExplosionField.explode(v);
                v.setOnClickListener(null);
            }
        });
    }
}

现在,通过按下 "action_reset" 按钮,必须从头开始绘制该 TextView。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_reset) {
        return true;
    }
    return super.onOptionsItemSelected(item);
  }
}

我知道所需的代码应该放在“if (id == R.id.action_reset)”之后,但是我已经尝试了通过互联网找到的几种方法,但是它们都没有起作用。

enter image description here

注意: 请访问https://github.com/tyrantgit/ExplosionField并考虑示例。我需要知道如何通过按按钮重新绘制。

1个回答

2

我仍然不明白你所说的“destroy that view”的意思。重置视图取决于您所做的更改。根据情况,需要撤消更改。如果您将可见性设置为“Gone”,那么现在需要将其设置为“Visible”。

因此,我查看了代码。请将以下内容添加到您的代码中。事情应该会起作用:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == R.id.action_reset) {
        View root = findViewById(R.id.root);
        reset(root);
        addListener(root);
        mExplosionField.clear();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

private void reset(View root) {
    if (root instanceof ViewGroup) {
        ViewGroup parent = (ViewGroup) root;
        for (int i = 0; i < parent.getChildCount(); i++) {
            reset(parent.getChildAt(i));
        }
    } else {
        root.setScaleX(1);
        root.setScaleY(1);
        root.setAlpha(1);
    }
}

更多信息,请参考完整的代码,点击以下链接:https://github.com/tyrantgit/ExplosionField/blob/master/app/src/main/java/tyrantgit/sample/MainActivity.java


嗨,在这里的 "destroy" 不是指销毁对象。如果你访问我放在上面的链接,你会有更好的理解。而且我已经尝试了你说的一切,可惜现在它并没有绘制那个视图。 - SDG69
那太完美了。顺便说一下,当时我怎么没意识到呢 -_o。很奇怪!!不管怎样,谢谢你。 - SDG69

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接