Ну, я пытался добиться этого эффекта, и это выглядело так:
Прежде всего, необходимо, чтобы начать процедуру определения и макс мин размер шрифта. Я сделал это:
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 в центре, чтобы он выглядел красивее.
EDIT:
Поскольку оп хотите изменить размер мнение, (который не должен использоваться с этим кодом) вот некоторые взломать вы можете сделать. Начните с изменения констант min/max на то, что вы хотите (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)));
Помните, что это, как я уже сказал, простой хак. На самом деле это не лучшее решение. Но поскольку это сложная задача, давайте придерживаться основ.
Начните с рассказа о том, что вы сделали до сих пор. Что у вас есть, ваш адаптер, ваш макет и т. Д. И т. Д. –
Я уже сделал listview с пользовательским list_item.xml, содержащим изображение и тексты. ListView хорошо отображается с помощью специального адаптера. Но пока все предметы отображаются в одном полноразмерном размере ... – Chol