繁体   English   中英

scrollBy() 不滚动

[英]scrollBy() doesn't 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);
}

}

请帮我让它工作

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

更新:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM