我构建了一个类(例如一个类来制作简单的动画):
public class myAnimations {
private Animation animation;
private ImageView imageView;
public myAnimations(ImageView img) {
super();
this.imageView = img;
}
public void rotate(int duration, int repeat) {
animation = new RotateAnimation(0.0f, 360.0f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
animation.setRepeatCount(repeat);
animation.setDuration(duration);
}
public void play() {
imageView.startAnimation(animation);
}
public void stop() {
animation.setRepeatCount(0);
}
}
我可以这样使用它:
ImageView myImage = (ImageView) findViewById(R.id.my_image);
myAnimations animation = new myAnimations(myImage);
animation.rotate(1000, 10);
animation.play(); //from this way…
但如果我想能够像这样使用它:
ImageView myImage = (ImageView) findViewById(R.id.my_image);
myAnimations animation = new myAnimations(myImage);
animation.rotate(1000, 10).play(); //…to this way
所以我可以称之为双重方法(我不知道名字),我应该如何建立我的课程?
PS如果你知道我需要的名字,请随时编辑标题。
答案 0 :(得分:7)
您正在询问允许方法链接并执行此操作,您的某些方法不应返回void,而应返回this
。例如:
// note that it is declared to return myAnimation type
public MyAnimations rotate(int duration, int repeat) {
animation = new RotateAnimation(0.0f, 360.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animation.setRepeatCount(repeat);
animation.setDuration(duration);
return this;
}
因此,当调用此方法时,您可以将另一个方法调用链接到它,因为它返回当前对象:
animation.rotate(1000, 10).play();
您需要为要允许链接的每个方法执行此操作。
请注意,根据Marco13,这也称为Fluent Interface。
另外,您需要学习并使用Java naming conventions。变量名都应以较低的字母开头,而类名以大写字母开头。学习这一点并遵循这一点将使我们能够更好地理解您的代码,并使您能够更好地理解其他代码。因此,将myAnimations类重命名为MyAnimations。
答案 1 :(得分:0)
它被称为Builder Design Pattern
,用于避免处理太多构造函数。
要实现它,首先你的方法返回类型应该是你的类名,你必须为链中想要的所有方法返回this
。
因此,在您的情况下,rotate方法返回类型将为myAnimations
。
public myAnimations rotate(int duration, int repeat) {
animation = new RotateAnimation(0.0f, 360.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animation.setRepeatCount(repeat);
animation.setDuration(duration);
return this;
}
现在,你可以按照你的期望来打电话,
animation.rotate(1000, 10).play();
另外,我强烈建议对类名使用正确的命名约定。理想情况下应该MyAnimations
。