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);
}
这里的问题是带有动画的,请提前帮助和感谢。
答案 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 }}或类似的东西。如果您在Long
和Int
之间有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)
替换此:
ImageView bart = (ImageView) findViewById(R.id.bart);
ImageView.animate().alpha(0).setDuration(2000);
使用方式:
(ImageView) findViewById(R.id.bart).animate().alpha(0).setDuration(2000);
替换此:
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);
遵循您最喜欢的任何一个选项。