Я раздуваю Views на ScrollView.
И мне нужно получить событие, когда при прокрутке один из этих видов (последний, например, или специальный тип) становится видимым (в зоне экрана).
Если вид изменяет видимость, вызывается метод onlayout, вы можете попробовать переписать этот метод и проверить его состояние.
Вам нужно переопределить onVisibilityChanged()
. Это также называется, когда один из предков вида изменяет видимость.
Это я раздул свой GridView и получил то, что вы хотите
public class MyGrideView extends GridView { boolean expanded = false; public MyGrideView(Context context) { super(context); } public MyGrideView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGrideView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public boolean isExpanded() { return expanded; } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // HACK! TAKE THAT ANDROID! if (isExpanded()) { // Calculate entire height by providing a very large height hint. // But do not use the highest 2 bits of this integer; those are // reserved for the MeasureSpec mode. int expandSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); ViewGroup.LayoutParams params = getLayoutParams(); params.height = getMeasuredHeight(); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } public void setExpanded(boolean expanded) { this.expanded = expanded; } }