我正在使用内部的AdapterViewFlipper处理Android小部件。众所周知,AdapterViewFlipper会通过视图自动旋转。 我的问题是,如何捕获视图在屏幕上显示的索引? 我尝试在其适配器中使用getViewAt()方法,但后来发现存在一些问题。 getViewAt()不仅在每次显示视图时调用,而且每次都在AppWidgetManager.notifyAppWidgetViewDataChanged()时调用。因此很难区分这两个事件。
是否有适用于AdapterViewFlipper或其适配器的侦听器,我们可以知道屏幕上当前显示的视图的索引?
提前致谢。
答案 0 :(得分:1)
结合Listener for ViewFlipper widget flipping events的答案
和
android; setting in/out animations on AdapterViewFlipper: Unknown animator name translate
您可以在AdapterViewFlipper上设置 Animator (请注意,这与ViewFlipper中使用的Animation不同) 然后,您可以创建一个AnimatorListener并将其添加到“动画中”,它将在显示子项时触发,然后可以调用getDisplayedChild()返回索引。
示例代码
// Setup AdapterViewFlipper
mAdapterViewFlipper = (AdapterViewFlipper) findViewById(R.id.AdapterViewFlipper);
mAdapterViewFlipper.setFlipInterval(5000);
// Set Some Animations
mAdapterViewFlipper.setInAnimation(getBaseContext(), R.animator.left_in);
mAdapterViewFlipper.setOutAnimation(getBaseContext(), R.animator.right_out);
// Create a AnimatorListener
mAnimatorListener = new AnimatorListener() {
public void onAnimationStart(Animator animator) {}
public void onAnimationRepeat(Animator animator) {}
public void onAnimationCancel(Animator animator) {}
public void onAnimationEnd(Animator animator) {
int displayedChild = mAdapterViewFlipper.getDisplayedChild();
Log.w(TAG, "onAnimationEnd view index:" + displayedChild);
int childCount = mAdapterViewFlipper.getCount();
if (displayedChild == childCount - 1) {
// Do what you want before wrapping to first view
//mAdapterViewFlipper.stopFlipping();
}
}
};
// Add the Listener to the In animation
mAdapterViewFlipper.getInAnimation().addListener(mAnimatorListener);
// Set adaptor just before start so view with index 0 triggers Listener
mAdapterViewFlipper.setAdapter(adapter);
// Start Flipping
mAdapterViewFlipper.setAutoStart(true);
R.animator.left_in和R.animator.right_out是“ res / animator”目录中的文件,其内容如下:-
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="x"
android:valueType="floatType"
android:valueFrom="-1500"
android:valueTo="0"
android:duration="600"/>
在此示例中,每次将视图翻转到您时都会得到一个Log事件,例如:-
TAG onAnimationEnd view index:0
TAG onAnimationEnd view index:1
TAG onAnimationEnd view index:2
TAG onAnimationEnd view index:3
TAG onAnimationEnd view index:4
TAG onAnimationEnd view index:0