滑动ListView时项目变大

时间:2014-09-23 14:51:45

标签: android listview android-listview

我想在Android中实现一个列表效果,作为Ultravisual Iphone应用程序中显示的效果:

enter image description here

类似的效果可以在Android上的Expo Milano 2015应用程序中查看。

我希望在向下滑动ListView时顶级项目变得更大。

我不知道如何做到这一点......它是当前视图中第一个项目的动画吗?

如果某人有一个例子或线索来实现这一目标,那就太棒了!

由于

1 个答案:

答案 0 :(得分:7)

我试图达到这个效果,它看起来像这样:

enter image description here

首先,您需要开始定义最大和最小字体大小。我这样做了:

private final int MAX_FONTSIZE=50;
private final int MIN_FONTSIZE=12;

接下来,您需要保存屏幕总高度。在你的onCreate上保存它:

    WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    mScreenHeight = size.y;

然后覆盖listview onScroll事件并执行以下操作:

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
            if(listview.getChildCount()>0)
            for(int i=0;i<listview.getChildCount();i++)
            {
                float font = Math.min(Math.max(MAX_FONTSIZE - (float)(((MAX_FONTSIZE-MIN_FONTSIZE)/(mScreenHeight*0.3)))*Math.max(listview.getChildAt(i).getTop(),0),MIN_FONTSIZE),MAX_FONTSIZE);
                ((TextView)listview.getChildAt(i)).setTextSize(font);
            }
        }

0.3表示在屏幕的大约30%处,它始终是最小字体大小。您可以根据需要调整该值。请记住,listview.getChildAt(i)将返回您在适配器上充气的视图。就我而言,它只是一个简单的文本视图,这就是为什么将它投射到TextView是安全的。您可能需要调用findViewById来获取textview。

您可能还需要使TextView居中,以使其看起来更漂亮。

修改

由于操作系统想要更改视图的大小(不应该与此代码一起使用),因此您可以执行此操作。首先将最小/最大常数更改为您想要的值(100和250)。然后继续创建一个标志,控制列表视图是否滚动。在onScrollStateChanged上添加此行isScrolling= i == SCROLL_STATE_TOUCH_SCROLL || i == SCROLL_STATE_FLING;,其中i是onScrollStateChanged的第二个参数。接下来将该行更改为if(listview.getChildCount()>0 && isScrolling)。下一步是更改视图高度。要做到这一点,你必须改变它的layoutParams。

listview.getChildAt(i).setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, Math.round(font * getResources().getDisplayMetrics().density)));

记住,就像我说的那样,这是一个简单的黑客攻击。到目前为止,这不是最好的解决方案。但是,由于这是一件很复杂的事情,所以让我们坚持基础。