Tho*_*mas 2 android android-animation android-layout
我正在尝试设置水平列表项的动画,以消除alpha动画的工作,并且layoutparam值也会随着时间的推移而减少但由于某种原因不会更改列表项的实际高度.
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
final int initialHeight = view.getMeasuredHeight();
if(interpolatedTime == 1){
imageAdapter.remove(view, position);
}else{
view.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime);
view.setAlpha(1 - interpolatedTime);
System.out.println(" v height = " + view.getHeight());
System.out.println(" v layoutparams = " + view.getLayoutParams().height);
view.forceLayout();
view.invalidate();
view.requestLayout();
}
}
Run Code Online (Sandbox Code Playgroud)
这是在imadeAdapter的getView方法中,binBtn是您触摸以删除listitem的按钮
binBtn.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_UP)
{
View vp = (View) v.getParent();
SqueezeAnimation ani = new SqueezeAnimation(this,vp,position);
ani.setDuration(1000);
v.startAnimation(ani);
Run Code Online (Sandbox Code Playgroud)
在Tanis回答之后更改为此代码,但仍然存在同样的问题,getHeight()打印674和getLayoutParams().高度打印100
else{
RelativeLayout.LayoutParams lps = new RelativeLayout.LayoutParams(100, 100);
view.setLayoutParams(lps);
view.requestLayout();
System.out.println(" v height = " + view.getHeight());
System.out.println(" v layoutparams = " + view.getLayoutParams().height);
Run Code Online (Sandbox Code Playgroud)
作为旁注,这是在imageadapter的getView方法中,并且更改了该视图的高度,并且我已经尝试将backgroundfillIV传递给动画,但仍然无法正常工作
View backgroundfillIV = gridView.findViewById(R.id.backroundfillbar);
double mult = products.get(position).value/ products.get(0).value;
backgroundfillIV.getLayoutParams().height = (int) ( (((bottleheight+20)*0.95)/mult));
Run Code Online (Sandbox Code Playgroud)
您需要setLayoutParams()
在某个时候调用以保存对LayoutParams的更改.
例如:
LayoutParams lps = view.getLayoutParams();
lps.height = initialHeight - (int)(initialHeight * interpolatedTime);
view.setAlpha(1 - interpolatedTime);
view.setLayoutParams(lps);
Run Code Online (Sandbox Code Playgroud)
这是因为该getLayoutParams()
方法仅返回LayoutParams引用的副本,而不是对LayoutParams本身的引用.关于这一点,在Java上通过引用或值返回有一些更深入的讨论.
归档时间: |
|
查看次数: |
3549 次 |
最近记录: |