scrollBy()不会滚动

时间:2014-09-05 10:48:13

标签: android view scroll

我试图创建一个高度大于显示器(或父级)高度的自定义视图。该视图必须是可滚动的。我使用onTouchEvent来测量新的手指位置,我实际上得到了我想要的东西,但我的观点并没有移动。我已经在互联网上搜索了问题的解决方案,但没有找到合适的答案。 这是我的观点

public class SmartScroll extends View{
public SmartScroll(Context context) {
    super(context);
}

int count = 0;
int yStart = 0, yEnd = 0;
@Override
public boolean onTouchEvent(MotionEvent event) {
    switch(event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            yStart = (int) event.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            MeasureSpec.toString(getMeasuredHeight());
            MeasureSpec.toString(getMeasuredWidth());
            count++;
            yEnd = (int) event.getY();
            scrollBy(0, (yEnd - yStart));
            yStart = yEnd;
            break;
        case MotionEvent.ACTION_UP:
            yStart = 0;
            yEnd = 0;
            break;
    }
    return true;
}

以及我如何在活动中创建它:

public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    SmartScroll scrollView = new SmartScroll(getApplicationContext()) {
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(1500, MeasureSpec.EXACTLY));
        }
    };
    scrollView.setBackgroundDrawable(getResources().getDrawable(R.drawable.gradient));
    setContentView(scrollView);
}

}

请帮助我让它发挥作用

1 个答案:

答案 0 :(得分:1)

不幸的是我没有在我的问题上找到答案。我尝试了一些来自互联网的工作示例,它们使用scrollBy()或scrollTo(),它们确实有效。 所以,我找到了适合我的解决方案。由于我无法移动自定义视图的内容,因此我决定移动整个视图。 我通过听onTouchEvents并设置我的视图的新Y坐标来做到这一点。设置新Y后我调用invalidate()。

更新:我终于找到了我最初问题的原因。这是我创建自定义ViewGroup的方式。我将ViewGroup的高度设置为大于其父级的高度,并希望滚动其内容。但是内容与ViewGroup的大小相同,因此scrollBy()没有找到滚动内容的需要。 我做的是我用我的孩子填充我的ViewGroup,以便内容变得比视图大,测量我的ViewGroup到MatchParent和scrollBy()最终开始工作。