首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >layoutParams不变

layoutParams不变
EN

Stack Overflow用户
提问于 2013-07-19 21:18:27
回答 2查看 4.7K关注 0票数 2

我正在尝试制作一个水平列表项的动画,忽略alpha动画作品,layoutparam的值也会随着时间的推移而减少,但由于某些原因,这并不会改变列表项的实际高度。

代码语言:javascript
复制
@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();

    }
}

这是在imadeAdapter的getView方法中,binBtn是用来删除列表项目的按钮

代码语言:javascript
复制
      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);

在Tanis的回答之后更改此代码,但仍然存在相同的问题,getHeight()打印674,getLayoutParams().height打印100

代码语言:javascript
复制
         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);

顺便说一句,这是在imageadapter的getView方法中实现的,它改变了视图的高度,我尝试传入backgroundfillIV来进行动画处理,但仍然不起作用

代码语言:javascript
复制
  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)); 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-19 21:36:40

您需要在某个时刻调用setLayoutParams()来保存对LayoutParams所做的更改。

例如:

代码语言:javascript
复制
LayoutParams lps = view.getLayoutParams();
lps.height = initialHeight - (int)(initialHeight * interpolatedTime);
view.setAlpha(1 - interpolatedTime);
view.setLayoutParams(lps);

这是因为getLayoutParams()方法只返回LayoutParams引用的副本,而不是对LayoutParams本身的引用。在Does Java return by reference or value上对此有更深入的讨论。

票数 7
EN

Stack Overflow用户

发布于 2013-07-20 01:16:46

不是真正的解决方案,但问题出在我找到的HorizontalListView上,因为它适用于普通的列表视图

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17747123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档