Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android layoutParams未更改_Android_Android Layout_Android Animation - Fatal编程技术网

Android layoutParams未更改

Android layoutParams未更改,android,android-layout,android-animation,Android,Android Layout,Android Animation,我正在尝试设置水平列表项的动画 alpha动画可以工作,layoutparam值也会随着时间的推移而减小 但由于某些原因,这不会改变列表项的实际高度 @Override protected void applyTransformation(float interpolatedTime, Transformation t) { final int initialHeight = view.getMeasuredHeight(); if(interpolatedTime == 1

我正在尝试设置水平列表项的动画 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();

    }
}
这在imadeAdapter的getView方法中 binBtn是一个按钮,您可以点击它来删除列表项

      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

         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来设置动画,但仍然不起作用

  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)); 

您需要在某个时候调用
setLayoutParams()
,以保存对LayoutParams的更改

例如:

LayoutParams lps = view.getLayoutParams();
lps.height = initialHeight - (int)(initialHeight * interpolatedTime);
view.setAlpha(1 - interpolatedTime);
view.setLayoutParams(lps);

这是因为
getLayoutParams()
方法只返回LayoutParams引用的副本,而不是对LayoutParams本身的引用。关于这一点,在上有一个更深入的讨论。

不是真正的解决方案,但问题在于我发现的HorizontalListView,因为它适用于普通的listview

谢谢你的回答,我真的认为这会解决问题,但它仍然不会改变高度。与其获得现有的LayoutParams,尝试创建一组全新的LayouParams将layoutparams更改为100,但仍然不会更改实际尺寸。我导入了
导入android.view.ViewGroup.LayoutParams
是正确的一个,您应该在其中使用视图父级的LayoutParams。如果此视图位于LinearLayout中,请使用LinearLayout.LayoutParams;如果视图位于RelativeLayout中,请使用RelativeLayout.LayoutParams;等等,恐怕我不确定那是怎么回事。确保以类似方式更新
backgroundfillIV
LayoutParam代码。进行更多的调试和实验(可能创建一个新的应用程序来玩),找出哪里出了问题。