我在animate()中遇到错误,这是“错误:无法从静态上下文引用非静态方法animate()”

时间:2019-07-18 08:50:20

标签: java android imageview

public class MainActivity extends AppCompatActivity {
    public void fade(View view){

        Log.i("INFO", "Image pressed");

        ImageView bart = (ImageView) findViewById(R.id.bart);

        ImageView.animate().alpha(0).setDuration(2000);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

这里的问题是带有动画的,请提前帮助和感谢。

3 个答案:

答案 0 :(得分:3)

ImageView bart = (ImageView) findViewById(R.id.bart);
ImageView.animate().alpha(0).setDuration(2000);

有问题,将其更改为:

ImageView bart = (ImageView) findViewById(R.id.bart);
bart.animate().alpha(0).setDuration(2000);

看到动画不是静态的,它需要执行该类的一个实例,因为它是每个实例专用的。

答案 1 :(得分:0)

您在''类本身而不是实例上调用animate();方法。仅当将该方法声明为ImageView方法时,此方法才有效。

从问题和非常直接的错误消息中,我可以看到您不熟悉static关键字。所以我会向你解释...

在某些情况下,静态方法可能非常有用,并且知道它的将来可能会对您有所帮助。

一个示例是类static中的decode();方法。它将Long解码为String(它的执行方式并不重要)。该方法不在Long类中,因为封装在OOP中很重要,并且如果您有20种不同的String方法用于Int,Long,Double ...这会在{ {1}}类。这就是为什么我们将其放在Long类本身而不是decode();类中的原因。

如果该方法不是静态方法,则需要这样编写:

String

使用静态,它看起来像这样:

String

如您所见,那时使用String string = "123"; Long number = new Long(); number.decode(string); 非常有用,因为您可以看到您使用的是String string = "123"; Long number = new Long(); number = Long.decode(string); 而不是static,{{1 }}或类似的东西。如果您在LongInt之间有100个文本行,那么很难确定该方法是从哪个类以及要获得的结果中得出的。

但这不再是问题。使用像eclipse这样的编译器,您可以查看方法来自哪个类,而没有Double关键字。 Java类仍然使用它的唯一点是:

它可以工作,如果他们更改了它,许多程序将不再起作用。

现在您的问题。您将Long number = new Long();方法视为number.decode(string);方法,但实际上并非如此。您只想为类的特定实例设置动画,以巴特为例。这意味着(如Stultuske已经说过的那样),您需要用static前面的类实例替换该类,在本例中为bart。

您需要替换以下内容:

animate();

与此:

static

您创建一个名为.animate()的{​​{1}}实例,然后,您要使用ImageView bart = (ImageView) findViewById(R.id.bart); ImageView.animate().alpha(0).setDuration(2000); 而不是类本身为创建的实例设置动画。

答案 2 :(得分:0)

  • 选项1

替换此:

ImageView bart = (ImageView) findViewById(R.id.bart);
ImageView.animate().alpha(0).setDuration(2000);

使用方式:

(ImageView) findViewById(R.id.bart).animate().alpha(0).setDuration(2000);
  • 选项2(由@Stultuske和@Fabian M回答)

替换此:

ImageView bart = (ImageView) findViewById(R.id.bart);
ImageView.animate().alpha(0).setDuration(2000);

使用方式:

ImageView bart = (ImageView) findViewById(R.id.bart);
bart.animate().alpha(0).setDuration(2000);

遵循您最喜欢的任何一个选项。