我已经在java中为listview实现了一个动画,就像你单击一个列表项时一样,一个视图向下滑动,两个按钮在点击时执行单独的选项,再点击一次,它向上滑动制作列表item看起来很正常(它确实上下推动其他项目)所以这个动画的持续时间已经设置为500,这样就可以顺利进行。
但是,问题是第一次单击列表项会显示动画太快(在第一次点击它之后再次平滑) 这对所有列表项都是一样的。
我尝试了很多来解决这个问题。我将让你看看我的动画类和我的onitemclicklistener。
(问题2: - 第一个是更多的影响,但如果你能解决这个问题,那就去了) 还有一个问题,对不起,但忘记动画一秒钟,当视图向下滑动并向下滚动时,你无法看到列表项,现在当你回到列表项时是' nt扩展了(滑出),这是因为视图的回收,但我怎么能绕过这个
动画类: -
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Transformation;
import android.widget.LinearLayout;
public ExpandCollapseAnimation(View view, int type) {
setDuration(500);
mAnimatedView = view;
mEndHeight = mAnimatedView.getMeasuredHeight();
mLayoutParams = ((LinearLayout.LayoutParams) view.getLayoutParams());
mType = type;
if(mType == EXPAND) {
setDuration(500);
mLayoutParams.bottomMargin = -mEndHeight;
} else {
setDuration(500);
mLayoutParams.bottomMargin = 0;
}
view.setVisibility(View.VISIBLE);
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
setDuration(500);
super.applyTransformation(interpolatedTime, t);
if (interpolatedTime < 1.0f) {
if(mType == EXPAND) {
setDuration(500);
mLayoutParams.bottomMargin = -mEndHeight + (int) (mEndHeight * interpolatedTime);
} else {
setDuration(500);
mLayoutParams.bottomMargin = - (int) (mEndHeight * interpolatedTime);
}
Log.d("ExpandCollapseAnimation", "anim height " + mLayoutParams.bottomMargin);
mAnimatedView.requestLayout();
} else {
if(mType == EXPAND) {
setDuration(500);
mLayoutParams.bottomMargin = 0;
mAnimatedView.requestLayout();
} else {
setDuration(500);
mLayoutParams.bottomMargin = -mEndHeight;
mAnimatedView.setVisibility(View.GONE);
mAnimatedView.requestLayout();
}
}
}
}
实施: -
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
View toolbar = view.findViewById(R.id.toolbar);
if(toolbar.getVisibility() == View.GONE){
ExpandCollapseAnimation expandAni = new ExpandCollapseAnimation(toolbar, 0);
toolbar.startAnimation(expandAni);
}else if(toolbar.getVisibility() == View.VISIBLE){
ExpandCollapseAnimation expandAmi = new ExpandCollapseAnimation(toolbar, 1);
toolbar.startAnimation(expandAmi);
}
}
});
答案 0 :(得分:0)
解决了,只是要使用ExpandableSlidingListview库,但我觉得它使用了很多ram,所以这个问题仍然存在。 :d