我试图创建一个高度大于显示器(或父级)高度的自定义视图。该视图必须是可滚动的。我使用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);
}
}
请帮助我让它发挥作用
答案 0 :(得分:1)
不幸的是我没有在我的问题上找到答案。我尝试了一些来自互联网的工作示例,它们使用scrollBy()或scrollTo(),它们确实有效。 所以,我找到了适合我的解决方案。由于我无法移动自定义视图的内容,因此我决定移动整个视图。 我通过听onTouchEvents并设置我的视图的新Y坐标来做到这一点。设置新Y后我调用invalidate()。
更新:我终于找到了我最初问题的原因。这是我创建自定义ViewGroup的方式。我将ViewGroup的高度设置为大于其父级的高度,并希望滚动其内容。但是内容与ViewGroup的大小相同,因此scrollBy()没有找到滚动内容的需要。 我做的是我用我的孩子填充我的ViewGroup,以便内容变得比视图大,测量我的ViewGroup到MatchParent和scrollBy()最终开始工作。