Android 动态控制控件的位置 小咪咪 2022-08-18 13:23 327阅读 0赞 下面是个小例子,给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的空间返回值是不同的(会动态更改高度的控件)
还没有评论,来说两句吧...