【发布时间】:2013-05-04 16:30:10
【问题描述】:
我正在开发一个在图像上产生图像效果的 android 应用程序。 下面是我的应用程序的快照:
如您所见,在底部 - 有一个水平滚动条,当用户触摸水平滚动条上的图像之一时,上面的图像会产生相同的效果。
我总共有 26 个图像效果,因此水平滚动条中有 26 个图像。现在,在我的代码中,我必须找到所有这些图像并将它们的 onClickListener() 设置为一个特定的侦听器。
我正在通过以下方式完成任务:
sepiaGreenishImage = (ImageView) findViewById(R.id.sepiaGreenish);
embossImage = (ImageView) findViewById(R.id.emboss);
sharpenImage = (ImageView) findViewById(R.id.sharpen);
slightYellowishImage = (ImageView) findViewById(R.id.ligth_yellow);
slightBluishImage = (ImageView) findViewById(R.id.light_blue);
slightReddishImage = (ImageView) findViewById(R.id.light_red);
slightGreenishImage = (ImageView) findViewById(R.id.light_green);
negativeImage = (ImageView) findViewById(R.id.negative);
greyScaleImage = (ImageView) findViewById(R.id.greyscale);
tintSeventyImage = (ImageView) findViewById(R.id.tint_at_70);
tintThirtyImage = (ImageView) findViewById(R.id.tint_at_30);
snowImage = (ImageView) findViewById(R.id.snow);
darkImage = (ImageView) findViewById(R.id.darken);
noiseImage = (ImageView) findViewById(R.id.noise);
flipImage = (ImageView) findViewById(R.id.flip);
rotateImage = (ImageView) findViewById(R.id.rotate);
gaussianBlurImage = (ImageView) findViewById(R.id.blur);
reddishImage = (ImageView) findViewById(R.id.reddish);
bluishImage = (ImageView) findViewById(R.id.bluish);
greenishImage = (ImageView) findViewById(R.id.greenish);
blackFilterImage = (ImageView) findViewById(R.id.black_filter);
increasedSepiaImage = (ImageView) findViewById(R.id.increased_sepia);
spiaBluishImage = (ImageView) findViewById(R.id.sepia_bluish);
brightImage = (ImageView) findViewById(R.id.brighten);
mirrorImage = (ImageView) findViewById(R.id.mirror);
然后按照下面的方式,我在设置onClickListener:
sepiaGreenishImage.setOnClickListener(this);
embossImage.setOnClickListener(this);
sharpenImage.setOnClickListener(this);
slightYellowishImage.setOnClickListener(this);
slightBluishImage.setOnClickListener(this);
slightReddishImage.setOnClickListener(this);
slightGreenishImage.setOnClickListener(this);
negativeImage.setOnClickListener(this);
greyScaleImage.setOnClickListener(this);
tintSeventyImage.setOnClickListener(this);
tintThirtyImage.setOnClickListener(this);
snowImage.setOnClickListener(this);
darkImage.setOnClickListener(this);
noiseImage.setOnClickListener(this);
flipImage.setOnClickListener(this);
rotateImage.setOnClickListener(this);
gaussianBlurImage.setOnClickListener(this);
reddishImage.setOnClickListener(this);
bluishImage.setOnClickListener(this);
greenishImage.setOnClickListener(this);
blackFilterImage.setOnClickListener(this);
increasedSepiaImage.setOnClickListener(this);
spiaBluishImage.setOnClickListener(this);
brightImage.setOnClickListener(this);
mirrorImage.setOnClickListener(this);
现在,我的问题是如何应用任何类型的重构?因为我经常重复自己。任何类型的 foreach 循环或类似的东西都可能对我有很大帮助!
【问题讨论】:
-
把ID放到一个集合中,为每个ID创建图片,设置点击监听?什么最有意义取决于您如何使用它们。
-
在布局xml中设置
OnClickListener怎么样? -
@vmironov 我可以在 XML 布局中引用我的类的当前实例-this 吗?如果是这样,怎么做?如果您在 stackoverflow.com 上向我提供类似的问题(关于在 XML 中设置 onClickListener),那将是一种乐趣!
-
@ArslanAli,你可以指定一个方法名,当
ImageView被点击时应该被调用。你可以在这里找到更详细的信息android:onClick vs setOnClickListener
标签: java android refactoring