我有一个包含许多图像的ViewFlipper。我将图像添加到ViewFlipper
,如下所示:
bitmap = BitmapFactory.decodeFile(files[i].getPath());
img = new ImageView(this);
img.setImageBitmap(bitmap);
img.setScaleType(ImageView.ScaleType.FIT_XY);
vf.addView(img, new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
img = null;
进入for循环。当动画开始时我想知道将显示什么图像(图像的名称),因为对于某些图像我必须停止翻转ViewFlipper.
我试过这个:
animFlipInNext.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
System.out.println("AnimStart- LeftIn" + " Will be displayed "
+ vf.getDisplayedChild());
final File[] imageName = images.listFiles(); //images that I want for viewflipper to stop.
for (int i = 0; i < images.length(); i++) {
bitmap = BitmapFactory.decodeFile(imageName[i].getPath());
Drawable background = new BitmapDrawable(bitmap);
if (vf.getCurrentView().getBackground().equals(background)) {
System.out.println("begin "
+ files[i].getName());
} else
System.out.println("NUNUNU");
}
}
但没有任何反应。我没有得到任何消息。我的错误在哪里?或者,怎么做?
答案 0 :(得分:0)
我选择了几个问题:
视图鳍状肢将以设定的间隔自动循环浏览视图。我不确定你的听众是否会在每次“翻转”时开火,或者只有在你第一次打电话startFlipping()
时才会开火。你可以测试它是在每次翻转时调用,还是仅在翻转开始时输入Log.v()
作为第一行并检查输出。
这里也有一个逻辑错误让你沮丧:
vf.getCurrentView().getBackground().equals(background)
在这行代码中,您不检查背景对象是否具有相同的源,您询问它是否是完全相同的对象。您知道这不是因为您之前刚刚在行中创建了新的background
对象。
但是,你应该能够达到你想要的效果。所有Views
都有一个“适合所有人”的属性,您可以出于任何原因使用该属性。请考虑以下代码:
bitmap = BitmapFactory.decodeFile(files[i].getPath());
img = new ImageView(this);
img.setImageBitmap(bitmap);
*img.setTag(files[i].getPath())*
img.setScaleType(ImageView.ScaleType.FIT_XY);
vf.addView(img, new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
img = null;
您现在可以致电:
if (vf.getCurrentView().getTag().toString().equalsIgnoreCase(mPathImLookingFor)) {
// Do something
}