有什么方法可以知道想要在ViewFlipper
翻转时显示想法吗?我有这个问题:我的ViewFlipper
包含一些图片和一个视频。我希望当viewflipper显示带视频的Videoview
时,ViewFlipper
停止翻转,视频开始播放。这仅在第一次显示视频时有效。之后,视频显示为图像,我不知道如何捕捉视频显示的时刻。有人可以帮帮我吗?
以下是我填充ViewFlipper的方法:
private void populate() {
for (int i = 0; i < jArray.length(); i++) {
System.out.println("lungime " + jArray.length());
LinearLayout l = new LinearLayout(this);
l.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
l.setBackgroundColor(0x000000);
l.setOrientation(LinearLayout.VERTICAL);
vf.addView(l);
File f = new File(Environment.getExternalStorageDirectory()
+ "/Images" + "/");
File[] files = f.listFiles();
if (files[i].getName().equals("Video" + idPhotos[i])) {
System.out.println("Video to Viewflipper");
System.out.println("Video Path " + files[i].getPath());
myVideoView = new VideoView(this);
myVideoView.setVideoPath(files[i].getPath());
myVideoView.requestFocus();
myVideoView.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
l.setBackgroundColor(Color.BLACK);
myVideoView.setKeepScreenOn(true);
myVideoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
vf.stopFlipping();
}
});
myVideoView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
downXValue = event.getX();
break;
}
case MotionEvent.ACTION_UP: {
currentX = event.getX();
if (downXValue == currentX) {
Intent intent = new Intent(getBaseContext(),
FinActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
}
}
return true;
}
});
myVideoView
.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
vf.startFlipping();
}
});
vf.stopFlipping();
myVideoView.start();
myVideoView.setId(i);
l.addView(myVideoView);
l.setId(i);
}
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 3;
options.inPurgeable = true;
bitmap = BitmapFactory.decodeFile(files[i].getPath());
img = new ImageView(this);
img.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
img.setImageBitmap(bitmap);
img.setOnTouchListener(this);
l.addView(img);
l.setId(i);
img = null;
}
}
和onCreate()方法我有这个:
if (ff.exists() && (files.length == jArray.length())) {
populate();
vf.setOutAnimation(AnimationUtils.loadAnimation(
getBaseContext(), R.anim.push_left_out));
vf.setInAnimation(AnimationUtils.loadAnimation(
getBaseContext(), R.anim.push_left_in));
vf.startFlipping();
}
(我一次只调用一次populate()方法,也许这就是问题)
欢迎任何想法。提前谢谢。
答案 0 :(得分:7)
我不确定这是否有效,但值得一试。
将动画侦听器添加到您设置为viewflipper的“IN”动画的动画对象中。 覆盖侦听器onAnimationEnd方法,并在该方法内部检查
vf.getDisplayedChild();
上面的代码将给出当前显示的孩子的索引。因此,如果它在视频视图中,您可以停止翻转并播放视频。
答案 1 :(得分:2)
还有一个ViewFlipper.getCurrentView()
方法直接返回当前视图。