Android 动态控制控件的位置

下面是个小例子,给listView设置一个背景,通过感应listView的滑动,让背景也跟着一块动,但是背景动作幅度要比listview大

// Prepare the header view for our list
		headerView = new View(this);//headerView是一个只有宽高,没有内容的空白view
		headerView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, TOP_HEIGHT));
		headerView.setBackgroundColor(Color.BLUE);
		mList.addHeaderView(headerView);//给listview设置一个header
		mList.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, strings));
		mList.setOnScrollListener(new OnScrollListener() {//listview的滑动监听器

			@Override
			public void onScrollStateChanged(AbsListView view, int scrollState) {

			}

			/**
			 * Listen to the list scroll. This is where magic happens ;)
			 */
			@Override
			public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

				// Calculate the ratio between the scroll amount and the list
				// header weight to determinate the top picture alpha
				Log.i("Alex", "listview的headerView getTop是"+headerView.getTop()+" bottom:"+headerView.getBottom()+" left"+headerView.getLeft()+" 高度"+headerView.getMeasuredHeight()+":"+headerView.getHeight());
				alpha = (float) -headerView.getTop() / (float) TOP_HEIGHT;//用头部view距离listview的顶部的距离,除以700,算出一个模糊程度,这样徐化程度就是拖拉距离的正比了
				// Apply a ceil
				if (alpha > 1) {
					alpha = 1;
				}

				// Apply on the ImageView if needed
				if (mSwitch.isChecked()) {
					mBlurredImage.setAlpha(alpha);
				}

				// Parallax effect : we apply half the scroll amount to our
				// three views
				mBlurredImage.setTop(headerView.getTop() * 2);//设置背景图片据屏幕顶部的距离
				mNormalImage.setTop(headerView.getTop() * 2);//设置背景图片据屏幕顶部的距离,这样的话就用模糊的背景把原图盖住了
				mBlurredImageHeader.handleScroll(headerView.getTop() / 2);

			}
		});
	}

其中最重要的就是View的setTop和getTop方法,这个方法可以看做得到此view距离屏幕顶端的距离,而且可以动态的设定,与动态设置这个view的marginTop差不多,同时也方便我们定位这个view在屏幕中的相对位置

同理还有getLeft()和getBottom()和getRight(),这样我们就可以动态的获取view的坐标和设置view的位置。


其中view还有getHeight()和getMeasuredHeight()方法,在本例中这两个方法的返回值相同,但是有些需要measure的空间返回值是不同的(会动态更改高度的控件)

你可能感兴趣的:(android,ListView,控件)