从scrollTo(x,y)调用的OnScrollChanged()但不更新ScrollView中的视图大小

时间:2011-09-03 21:16:07

标签: android

我一直在编写代码来在scrollView中的ImageViews上创建放大镜效果。 (我想改变中心的ImageViews大小比侧面的大小) 我继承了Horizo​​nalScrollView并覆盖了onScrollChanged()。 在OnScrollChanged中,我根据屏幕上的位置更改了ImageViews的大小。 (我用LinearLayout.LayoutParams改变了大小) 一切正常,但当我试图将scrollView移动到中心时, 通过scrollTo() runnable中的scrollview.post(),滚动视图移动到指定位置并调用onScrollChanged(),但scrollView中的ImageViews不会正确更改其大小(它们随机更改大小) 。 只有当我触摸屏幕并用手指移动scrollView时,视图才会正确地改变它们的大小。

主要代码:

public class Scroll extends Activity implements ScrollViewListener{
     /** Called when the activity is first created. */
 LinearLayout container;
 ObservableScrollView myScroll;
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

    container=(LinearLayout)findViewById(R.id.linearLayout1);
  myScroll=(ObservableScrollView)findViewById(R.id.horizontalScrollView1);
  myScroll.setScrollViewListener(this);
   for(int i=0;i<30;i++)
   {
        ImageView img=new ImageView(this);
        img.setImageResource(R.drawable.icon);
        container.addView(img);
   }


      myScroll.post(new Runnable() {
      @Override
       public void run() {
          myScroll.scrollBy(500,0);

    } 
    });







   }
@Override
public void onScrollChanged(ObservableScrollView scrollView, int x, int y,
        int oldx, int oldy) {


    int count=container.getChildCount();
     int [] xy={0,0};
        container.getChildAt(count-1).getLocationOnScreen(xy);


            int x1=xy[0];



        for(int i=0;i<count;i++)
            AdjustSize((ImageView)container.getChildAt(i));






}



        private void AdjustSize(ImageView image)
           {




            if(image.getVisibility()==View.VISIBLE){
               int [] xy={0,0};
                image.getLocationOnScreen(xy);
                int x1=xy[0];
                if((x1>10)&&(x1<790))
                {
                double xSize=220-(0.5*220*((Math.abs(x1-300)))/400);
                int xInt=(int)xSize;


                    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(xInt,xInt);




                lp.gravity=Gravity.CENTER;   

                     image.setLayoutParams(lp);
                }
                     // image.setLayoutParams(new LinearLayout.LayoutParams(xInt, xInt));

               }


                }

          }

0 个答案:

没有答案