0

我的应用程序中有一个自定义列表视图。每个列表项在左侧都有一个图标,在右侧有一些文本。我希望在单击图标时显示一些动画。我使用了 ontouch 监听器,动画在 on MotionEvent.ACTION_DOWN 事件和其他一些动作发生在 MotionEvent.ACTION_UP 事件时开始。

问题是,当我单击列表视图中的特定项目时,该图标会为该特定项目以及列表视图中的最后一个项目设置动画..每次..不确定问题可能是什么。请帮忙。

代码的相关部分粘贴在下面:

public class Accounts implements OnItemClickListener, OnClickListener, AnimationListener{

Animation animation1;
ImageButton folderBTN;

//oncreate method
    animation1 = AnimationUtils.loadAnimation(this, R.anim.to_middle);
    animation1.setAnimationListener(this);



    //Adapter getview method
    ..
    .
    .
    .
    getView(){

        folderBTN.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    folderBTN.clearAnimation();
                    folderBTN.setAnimation(animation1);
                    folderBTN.startAnimation(animation1);
                    isIconShowing=true;

                } else if (event.getAction() == MotionEvent.ACTION_UP) {
                    FolderList.actionHandleAccount(Accounts.this,
                            (Account) account);
                }
                return false;
        }

    }


}
4

2 回答 2

1

您的问题是您正在重用相同的动画实例,尝试在 onTouch 方法中声明动画实例。试试下面的代码片段。

 public class Accounts implements OnItemClickListener, OnClickListener, AnimationListener{


    ImageButton folderBTN;

    //oncreate method


        //Adapter getview method
        ..
        .
        .
        .
        getView(){

            folderBTN.setOnTouchListener(new OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {

                            Animation animation;
                            animation = AnimationUtils.loadAnimation(this, R.anim.to_middle);
                            animation.setAnimationListener(Accounts.this);


                    if (event.getAction() == MotionEvent.ACTION_DOWN) {
                        folderBTN.clearAnimation();
                        folderBTN.setAnimation(animation);
                        folderBTN.startAnimation(animation);
                        isIconShowing=true;

                    } else if (event.getAction() == MotionEvent.ACTION_UP) {
                        FolderList.actionHandleAccount(Accounts.this,
                                (Account) account);
                    }
                    return false;
            }

        }


    }
于 2013-10-11T08:00:22.140 回答
0

我终于想通了。上述代码中的 imagebutton folderbtn 包含对最后生成的视图的引用。使用不同的变量为我解决了这个问题。这是代码,以防有人可能需要它。

public boolean onTouch(View v, MotionEvent event) {

                    if (event.getAction() == MotionEvent.ACTION_DOWN) {
                        toAnimateBTN=(ImageButton) v.findViewById(R.id.folders);
                        toAnimateBTN.clearAnimation();
                        toAnimateBTN.setAnimation(animation2);
                        toAnimateBTN.startAnimation(animation2);
                    }
于 2013-10-15T06:22:55.853 回答