我想在Android中实现一个列表效果,作为Ultravisual Iphone应用程序中显示的效果:
类似的效果可以在Android上的Expo Milano 2015应用程序中查看。
我希望在向下滑动ListView时顶级项目变得更大。
我不知道如何做到这一点......它是当前视图中第一个项目的动画吗?
如果某人有一个例子或线索来实现这一目标,那就太棒了!
由于
答案 0 :(得分:7)
我试图达到这个效果,它看起来像这样:
首先,您需要开始定义最大和最小字体大小。我这样做了:
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)));
记住,就像我说的那样,这是一个简单的黑客攻击。到目前为止,这不是最好的解决方案。但是,由于这是一件很复杂的事情,所以让我们坚持基础。