滑动ListView时项目变大

Cho*_*hol 4 android listview android-listview

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

在此输入图像描述

类似的效果可以在Android的米兰世博会2015应用程序上查看.

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

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

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

谢谢

Ped*_*ira 7

好吧,我试图实现这种效果,它看起来像这样:

在此输入图像描述

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

private final int MAX_FONTSIZE=50;
private final int MIN_FONTSIZE=12;
Run Code Online (Sandbox Code Playgroud)

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

    WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    mScreenHeight = size.y;
Run Code Online (Sandbox Code Playgroud)

然后覆盖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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:

由于op想要更改视图的大小(不应该与此代码一起使用),这里有一些你可以做的黑客攻击.首先将最小/最大常数更改为您想要的值(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)));

请记住,就像我说的那样,这是一个简单的黑客行为.到目前为止,这不是最好的解决方案.但是,因为这是一个复杂的事情,所以让我们坚持基础.