我正在处理动画,我希望以更清晰的代码实现OnClickListener
。
例如,我可以这样做。
注意:我只想在active[0]
为true
MainActivity
final Boolean[] active = {false};
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(active[0]){
// do some work
}else{
Animation animPictureDeactiveLeft = AnimationUtils.loadAnimation(MainActivity.this, R.anim.deactivate_picturebtn_onleft);
Animation animVideoMiniLeft = AnimationUtils.loadAnimation(MainActivity.this, R.anim.activate_videobtn_onleft);
Animation animGifMiniLeft = AnimationUtils.loadAnimation(MainActivity.this, R.anim.move_gifbtn_onleft);
ImageView btnCameraPic = (ImageView) findViewById(R.id.btnCapturePicture);
ImageView btnCameraVid = (ImageView) findViewById(R.id.btnCaptureVideo);
ImageView btnCameraGif = (ImageView) findViewById(R.id.btnCaptureGif);
btnCameraPic.startAnimation(animPictureDeactiveLeft);
btnCameraVid.startAnimation(animVideoMiniLeft);
btnCameraGif.startAnimation(animGifMiniLeft);
active[0] = true;
}
}
});
此代码工作正常但我不喜欢这种代码风格
所以,我想在其他地方实施OnClickListener
。
我尝试了以下内容,但我不知道这是否是一个好方法 如果没有,请告诉我最好的方法。
TestClick
public class TestClick extends AppCompatActivity implements OnClickListener {
public static boolean bActive = false;
@Override
public void onClick(View v) {
if(bActive) {
active();
}else{
Animation animPictureDeactiveLeft = AnimationUtils.loadAnimation(TestClick.this, R.anim.deactivate_picturebtn_onleft);
Animation animVideoMiniLeft = AnimationUtils.loadAnimation(TestClick.this, R.anim.activate_videobtn_onleft);
Animation animGifMiniLeft = AnimationUtils.loadAnimation(TestClick.this, R.anim.move_gifbtn_onleft);
ImageView btnCameraPic = (ImageView) findViewById(R.id.btnCapturePicture);
ImageView btnCameraVid = (ImageView) findViewById(R.id.btnCaptureVideo);
ImageView btnCameraGif = (ImageView) findViewById(R.id.btnCaptureGif);
btnCameraPic.startAnimation(animPictureDeactiveLeft);
btnCameraVid.startAnimation(animVideoMiniLeft);
btnCameraGif.startAnimation(animGifMiniLeft);
bActive = true;
}
}
public void active(){
}
}
MainActivity
button.setOnClickListener(new TestClick(){
public void active(){
// do some work
}
});
答案 0 :(得分:0)
如果你有TestClick extends AppCompatActivity
,那就错了。
button.setOnClickListener(new TestClick(){
public void active(){
// do some work
}
});
从不new
活动。
如果您有一个实现该接口的活动。
public class TestClick extends AppCompatActivity implements OnClickListener
然后这就是你如何使用它(假设按钮在当前的TestClick
类中)。
button.setOnClickListener(TestClick.this);
然后调用onClick
类中的覆盖this
。
如果<{1}} 活动,则TestClick
也不应该展开AppCompatActivity
。
在这种情况下,你需要一个简单的类,而不是一个完整的Activity
您还可能想要检查点击的按钮。
public class TestClick implements OnClickListener {
private boolean bActive;
private final Context mContext;
public TestClick(Context context) {
this.mContext = context;
}
public void setActive(boolean active) { this.bActive = active; }
public boolean isActive() { return this.bActive; }
@Override
public void onClick(View v) {
if (v.getId() == R.id.your_button_id) {
if (this.isActive()) {
} else {
}
}
然后你可以使用
button.setOnClickListener(new TestClick(MainActivity.this));
请注意:findViewById
无法在此解析,因此您需要获得另一种方式来引用您的观点。