我的应用中有自定义列表视图。每个列表项左侧都有一个图标,右侧有一些文本。 我想在点击图标时显示一些动画。我使用了ontouch侦听器,当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;
}
}
}
答案 0 :(得分: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;
}
}
}
答案 1 :(得分: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);
}