Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android 3d transition中使用列表视图代替图像视图_Android_Animation - Fatal编程技术网

如何在android 3d transition中使用列表视图代替图像视图

如何在android 3d transition中使用列表视图代替图像视图,android,animation,Android,Animation,我正在使用另一个列表视图代替图像视图,尝试按照示例应用中给出的方式进行3d转换。但是列表视图位于屏幕的右侧,而不是左侧,并且文字颠倒。我的列表如下所示: 我的代码是: public class EventListActivity extends ListActivity { private ListView lv1, lv2; private ViewGroup mContainer; private ArrayList<ArrayAdapter<String>>

我正在使用另一个列表视图代替图像视图,尝试按照示例应用中给出的方式进行3d转换。但是列表视图位于屏幕的右侧,而不是左侧,并且文字颠倒。我的列表如下所示:

我的代码是:

public class EventListActivity extends ListActivity  {

private ListView lv1, lv2;
private ViewGroup mContainer;
private ArrayList<ArrayAdapter<String>> arr;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub

    super.onCreate(savedInstanceState);
    setContentView(R.layout.eventlist);
    arr = new ArrayList<ArrayAdapter<String>>();
    String[] eventlist = getResources().getStringArray(R.array.eventlist);
    String[] eventlist1 = getResources().getStringArray(R.array.techc);
    String[] eventlist2 = getResources().getStringArray(R.array.presc);
    String[] eventlist3 = getResources().getStringArray(R.array.roboc);
    String[] eventlist4 = getResources().getStringArray(R.array.managec);
    String[] eventlist5 = getResources().getStringArray(R.array.literaryc);
    String[] eventlist6 = getResources().getStringArray(R.array.creationc);
    String[] eventlist7 = getResources().getStringArray(R.array.gamingc);
    ArrayAdapter<String> a1 = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, eventlist1);
    ArrayAdapter<String> a2 = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, eventlist2);
    ArrayAdapter<String> a3 = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, eventlist3);
    ArrayAdapter<String> a4 = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, eventlist4);
    ArrayAdapter<String> a5 = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, eventlist5);
    ArrayAdapter<String> a6 = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, eventlist6);
    ArrayAdapter<String> a7 = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, eventlist7);
    arr.add(a1);
    arr.add(a3);
    arr.add(a2);

    arr.add(a4);
    arr.add(a5);
    arr.add(a6);
    arr.add(a7);
    final ArrayAdapter<String> a = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, eventlist);
    lv1 = getListView();
    lv2 = (ListView) findViewById(R.id.list2);
    mContainer = (ViewGroup) findViewById(R.id.container);
    lv1.setAdapter(a);
    lv2.setClickable(true);
    lv2.setFocusable(true);
    mContainer
            .setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);
    lv1.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            lv2.setAdapter(arr.get(arg2));

            applyRotation(arg2, 0, 90);

        }
    });

}

protected void applyRotation(int position, int start, int end) {
    // TODO Auto-generated method stub
    final float centerX = mContainer.getWidth() / 2.0f;
    final float centerY = mContainer.getHeight() / 2.0f;

    // Create a new 3D rotation with the supplied parameter
    // The animation listener is used to trigger the next animation
    final Rotate3dAnimation rotation = new Rotate3dAnimation(start, end,
            centerX, centerY, 310.0f, true);
    rotation.setDuration(500);
    rotation.setFillAfter(true);
    rotation.setInterpolator(new AccelerateInterpolator());
    rotation.setAnimationListener(new DisplayNextView(position));

    mContainer.startAnimation(rotation);
}

private final class DisplayNextView implements Animation.AnimationListener {
    private final int mPosition;

    private DisplayNextView(int position) {
        mPosition = position;
    }

    public void onAnimationStart(Animation animation) {
    }

    public void onAnimationEnd(Animation animation) {
        mContainer.post(new SwapViews(mPosition));
    }

    public void onAnimationRepeat(Animation animation) {
    }
}

/**
 * This class is responsible for swapping the views and start the second
 * half of the animation.
 */
private final class SwapViews implements Runnable {
    private final int mPosition;

    public SwapViews(int position) {
        mPosition = position;
    }

    public void run() {
        final float centerX = mContainer.getWidth() / 2.0f;
        final float centerY = mContainer.getHeight() / 2.0f;
        Rotate3dAnimation rotation;

        if (mPosition > -1) {
            lv1.setVisibility(View.GONE);
            lv2.setVisibility(View.VISIBLE);
            lv2.requestFocus();

            rotation = new Rotate3dAnimation(90, 180, centerX, centerY,
                    310.0f, false);
        } else {
            lv2.setVisibility(View.GONE);
            lv1.setVisibility(View.VISIBLE);
            lv1.requestFocus();

            rotation = new Rotate3dAnimation(90, 0, centerX, centerY,
                    310.0f, false);
        }

        rotation.setDuration(500);
        rotation.setFillAfter(true);
        rotation.setInterpolator(new DecelerateInterpolator());

        mContainer.startAnimation(rotation);
    }
}}
公共类EventListActivity扩展了ListActivity{
私有ListView 1级、2级;
私有视图组mContainer;
私人ArrayList arr;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.eventlist);
arr=新的ArrayList();
String[]eventlist=getResources().getStringArray(R.array.eventlist);
String[]eventlist1=getResources().getStringArray(R.array.techc);
String[]eventlist2=getResources().getStringArray(R.array.presc);
String[]eventlist3=getResources().getStringArray(R.array.roboc);
String[]eventlist4=getResources().getStringArray(R.array.managec);
String[]eventlist5=getResources().getStringArray(R.array.literaryc);
String[]eventlist6=getResources().getStringArray(R.array.creationc);
String[]eventlist7=getResources().getStringArray(R.array.gamingc);
ArrayAdapter a1=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,eventlist1);
ArrayAdapter a2=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,eventlist2);
ArrayAdapter a3=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,eventlist3);
ArrayAdapter a4=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,eventlist4);
ArrayAdapter a5=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,eventlist5);
ArrayAdapter a6=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,eventlist6);
ArrayAdapter a7=新的ArrayAdapter(此,
android.R.layout.simple_list_item_1,eventlist7);
arr.add(a1);
附件(a3);
arr.add(a2);
附件(a4);
arr.add(a5);
arr.add(a6);
arr.add(a7);
最终阵列适配器a=新阵列适配器(此,
android.R.layout.simple_list_item_1,eventlist);
lv1=getListView();
lv2=(ListView)findViewById(R.id.list2);
mContainer=(视图组)findViewById(R.id.container);
lv1.设置适配器(a);
2级。可设置可点击(真);
lv2.setFocusable(真);
mContainer
.setPersistentDrawingCache(ViewGroup.PERSISTENT\u动画\u缓存);
lv1.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、内部arg2、,
长arg3){
//TODO自动生成的方法存根
lv2.setAdapter(arr.get(arg2));
苹果红(arg2,0,90);
}
});
}
受保护的无效应用程序(int位置、int开始、int结束){
//TODO自动生成的方法存根
最终浮动中心x=mContainer.getWidth()/2.0f;
最终浮动中心Y=mContainer.getHeight()/2.0f;
//使用提供的参数创建新的三维旋转
//动画侦听器用于触发下一个动画
最终旋转三角化旋转=新旋转三角化(开始、结束、,
centerX,centerY,310.0f,真);
轮换。设定持续时间(500);
旋转。setFillAfter(真);
setInterpolator(新的AccelerateInterpolator());
setAnimationListener(新的DisplayNextView(位置));
mContainer.startAnimation(旋转);
}
私有最终类DisplayNextView实现Animation.AnimationListener{
私人终审法院;
专用显示器NEXTVIEW(内部位置){
位置=位置;
}
onAnimationStart上的公共无效(动画){
}
onAnimationEnd上的公共无效(动画){
mContainer.post(新swapview(mPosition));
}
onAnimationRepeat上的公共无效(动画){
}
}
/**
*此类负责交换视图并启动第二个视图
*动画的一半。
*/
私有最终类SwapViews实现了Runnable{
私人终审法院;
公共SwapView(内部位置){
位置=位置;
}
公开募捐{
最终浮动中心x=mContainer.getWidth()/2.0f;
最终浮动中心Y=mContainer.getHeight()/2.0f;
旋转,旋转;
如果(位置>-1){
lv1.setVisibility(视图已消失);
lv2.setVisibility(View.VISIBLE);
lv2.requestFocus();
旋转=新的旋转三角化(90、180、centerX、centerY、,
310.0f,假);
}否则{
lv2.setVisibility(视图已消失);
lv1.setVisibility(View.VISIBLE);
lv1.requestFocus();
旋转=新的旋转三角化(90,0,centerX,centerY,
310.0f,假);
}
轮换。设定持续时间(500);
旋转。setFillAfter(真);
旋转。设置内插器(新减速器内插器());
mContainer.startAnimation(旋转);
}
}}
我的xml代码是`

<ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layoutAnimation="@anim/layout_bottom_to_top_slide"
    android:persistentDrawingCache="animation|scrolling" />

<ListView
    android:id="@+id/list2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:scaleType="fitCenter"
    android:visibility="gone" />

`


如何使列表视图处于正确位置?

您可能正在将其旋转180度,从而导致列表向后

你需要的是旋转到360度。虽然这将导致更多的“旋转”,但您可以通过以下方式假装:

将列表旋转90度。当列表旋转90度时,我们看不到它,您可以用新列表替换您的列表。 然后在
AnimationListener.onAnimationEnd()
中,您只需将列表再次设置为270到360的动画即可:

Rotate3dAnimation rotation = new Rotate3dAnimation(270, 360, centerX, centerY, 60.0f, false);
没有听到它的结局

完整onAnimationEnd:

public void onAnimationEnd(Animation animation) {       
    // RENDER YOUR NEW LIST HERE

    final float centerX = mContainer.getWidth() / 2.0f;
       final float centerY = mContainer.getHeight() / 2.0f;

       Rotate3dAnimation rotation = new Rotate3dAnimation(270, 360, centerX, centerY, 60.0f, false);

    rotation.setDuration(500);
    rotation.setFillAfter(true);
    rotation.setInterpolator(new AccelerateInterpolator());
    mContainer.startAnimation(rotation);
}

您可能正在将其旋转180度,这将导致列表向后

你需要的是旋转到360度。虽然这将导致更多的“旋转”,但您可以通过以下方式假装:<