Android 动态控制控件的位置

本文通过一个实例展示了如何在Android中动态控制ListView背景的移动,利用setTop和getTop等方法实现控件位置的改变,以达到跟随ListView滑动的效果。同时介绍了getLeft(), getBottom(), getRight()等方法用于获取和设置视图的位置,以及getHeight()和getMeasuredHeight()在不同情况下的应用。" 125297849,14505090,Echarts图形组件配置详解,"['Echarts', '前端开发', 'javascript']

下面是个小例子,给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的空间返回值是不同的(会动态更改高度的控件)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值