我一直在编写代码来在scrollView中的ImageViews上创建放大镜效果。 (我想改变中心的ImageViews大小比侧面的大小)
我继承了HorizonalScrollView并覆盖了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));
}
}
}