Android 将动画listitem返回到正常状态
我有一个带有动画listitems的listview,当listview中的一个项目被选中时,它会淡出并变得不可见,但我遇到的问题是,当另一个项目被选中时,它不会返回到正常状态 我已经设置了Android 将动画listitem返回到正常状态,android,android-listview,android-animation,Android,Android Listview,Android Animation,我有一个带有动画listitems的listview,当listview中的一个项目被选中时,它会淡出并变得不可见,但我遇到的问题是,当另一个项目被选中时,它不会返回到正常状态 我已经设置了android:fillEnabled=“true”和android:fillAfter=“true”,使列表项保持动画状态 像这样: ListItem已选中 ListItem已设置动画并淡出 是完全动态和不可见的 已选择另一个列表项 设置动画并淡出 两个列表项都已淡出,但我只希望一次设置一个动画/不可见
android:fillEnabled=“true”
和android:fillAfter=“true”
,使列表项保持动画状态
像这样:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/bounce_interpolator"
android:fillEnabled="true"
android:fillAfter="true"
>
<scale
android:duration="600"
android:fromXScale="0.75"
android:fromYScale="0.75"
android:pivotX="25%"
android:pivotY="25%"
android:toXScale="1.00"
android:toYScale="1.00" />
<alpha
android:duration="250"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
以及listview:
@Override
public void onComplete(List<Profile> friends) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mSpinner.setVisibility(View.GONE);
mSpinner.clearAnimation();
}
});
// populate list
List<String> values = new ArrayList<String>();
for (Profile profile : friends) {
//profile.getInstalled();
values.add(profile.getName());
}
listView = (ListView) findViewById(R.id.list);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> av, final View view, final int i, long i2) {
Animation anim = AnimationUtils.loadAnimation(SendActivity.this, R.anim.jump);
view.startAnimation(anim);
}
});
ArrayAdapter<String> friendsListAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.list_items2, values);
friendsListAdapter.sort(new Comparator<String>() {
@Override
public int compare(String lhs, String rhs) {
return lhs.compareTo(rhs);
}
});
mFriendsList.setAdapter(friendsListAdapter);
}
};
@覆盖
未完成的公共作废(列出好友){
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
mSpinner.setVisibility(View.GONE);
mSpinner.clearAnimation();
}
});
//填充列表
列表值=新的ArrayList();
用于(个人资料:朋友){
//profile.getInstalled();
add(profile.getName());
}
listView=(listView)findViewById(R.id.list);
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共虚线单击(AdapterView av、最终视图、最终int i、长i2){
动画动画=AnimationUtils.loadAnimation(SendActivity.this,R.anim.jump);
视图。startAnimation(动画);
}
});
ArrayAdapter friendsListAdapter=新的ArrayAdapter(getApplicationContext(),R.layout.list_items2,values);
排序(新的比较器(){
@凌驾
公共整数比较(字符串lhs、字符串rhs){
返回左侧比较(右侧);
}
});
设置适配器(friendsListAdapter);
}
};
关于如何做到这一点,有什么提示吗?您需要在适配器的
getView
方法中设计一些逻辑,以便所选行的backing对象具有布尔属性,比如isClicked。在getView
方法中,检查对象是否为true,如果为true,则返回null,否则返回视图
您可以设计类似的备用逻辑。还有其他(更优雅的)方法。但这是我首先想到的+我已经在评论中提出了这个解决方案
private View animatedView = null;
//....code .. code .. code...
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> av, final View view, final int i, long i2) {
if (animatedView != null){
Animation anim = AnimationUtils.loadAnimation(SendActivity.this, R.anim.unjump);
animatedView.startAnimation(anim);
}
Animation anim = AnimationUtils.loadAnimation(SendActivity.this, R.anim.jump);
view.startAnimation(anim);
animatedView = view;
}
});
//another animation (called it unjump) to clear the alpha level
//reusing your stuff
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/bounce_interpolator"
android:fillEnabled="true"
android:fillAfter="true"
>
<scale
android:duration="600"
android:fromXScale="0.75"
android:fromYScale="0.75"
android:pivotX="25%"
android:pivotY="25%"
android:toXScale="1.00"
android:toYScale="1.00" />
<alpha
android:duration="250"
android:fromAlpha="0.0" //exchanged from/to -alpha levels (so this would come from transparent to non-transparent)
android:toAlpha="1.0" />
</set>
private View animatedView=null;
//……代码。。代码。。代码。。。
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共视图(AdapterView av、最终视图、最终int i、长i2){
如果(animatedView!=null){
Animation anim=AnimationUtils.loadAnimation(SendActivity.this,R.anim.unjump);
动画视图。startAnimation(动画);
}
动画动画=AnimationUtils.loadAnimation(SendActivity.this,R.anim.jump);
视图。startAnimation(动画);
动画视图=视图;
}
});
//另一个用于清除alpha级别的动画(称为unjump)
//重复使用你的东西
将先前选择的元素存储到位置,下次按下其他元素时,将先前的元素返回到正常状态。谢谢,您能否给出一个代码示例,说明如何添加此元素?