具有自定义视图的 ScrollView 不会滚动 - android?
Posted
技术标签:
【中文标题】具有自定义视图的 ScrollView 不会滚动 - android?【英文标题】:ScrollView with custom view wont scroll - android? 【发布时间】:2018-03-26 13:15:38 【问题描述】:尝试在 ScrollView 上构建和添加自定义视图。但它不会滚动。
在覆盖 onMeasure 时 - 无法识别。
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/scrollView"
android:layout_
android:layout_
android:fillViewport="true">
</ScrollView>
//tried above making as child.
代码:
ScrollView scrollView = findViewById(R.id.scrollView);
//LinearLayout linearLayout = findViewById(R.id.line);
myView gw = new myView(this,bitmap);
// ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(480,800);
scrollView.addView(gw);
scrollView.setFillViewport(true);
myView 类使用此代码绘制位图:
public class myView extends SurfaceView implements View.OnTouchListener
private Bitmap bitmap;
private SurfaceHolder holder;
public myView(Context context, Bitmap bitmap)
super(context);
holder = getHolder();
this.bitmap = bitmap;
.....
@Override
public void draw(Canvas canvas)
super.draw(canvas);
canvas.drawBitmap(bitmap, 10, 20, null);
canvas.drawPath(path, paint);
canvas.drawText("Second floor", x, y + 600, paint1);
Log.d("test", "drawing....");
视图绘制但不会滚动。 如何让它滚动?
【问题讨论】:
您没有设置视图的宽度和高度。滚动视图在视图不在视图(使滚动启用的屏幕之外)时起作用 自定义视图绘制了一个超出屏幕尺寸的巨大图像。 你能把自定义视图的代码放上去吗 你能分享一下它在哪里画了这么大的图像吗? 已编辑。图像尺寸为 1800 像素 X 1080 像素。屏幕尺寸为 1280 x 720 像素。 【参考方案1】:用一些 ViewGroup 包裹你的视图,比如 LinearLayout 或 FrameLayout:
LinearLayout linear = new LinearLayout(this);
linear.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
linear.setOrientation(1);
scrollView.addView(linear);
myView gw = new myView(this,bitmap);
linear.addView(gw );
编辑:
从您的代码中,我看到您正在使用 SurfaceView。 SurfaceView 非常不同,不支持从 ScrollView 滚动。您可以将视图从 SurfaceView 更改为其他内容或添加:
implements View.OnTouchListener, SurfaceHolder.Callback
并自行实现滚动。
见:Android SurfaceView scrolling
【讨论】:
我试过了,但没有滚动。还尝试使用 XML 进行此操作。但是这个画布对象不会滚动。 在持有者中添加了这个回调。我应该实施吗? - holder.addCallback(new SurfaceHolder.Callback() ... 是的,正如引用的答案中所述。 对此进行了测试,绘制视图并看到半幅图像但仍无法滚动。然而,onTouchListener 从一开始就致力于此。 很抱歉,但是使用此解决方案无法滚动只是您的实施错误,因为您必须自己提供它。链接的问题确切地显示了如何做到这一点。你确定你做的一切都正确吗?以上是关于具有自定义视图的 ScrollView 不会滚动 - android?的主要内容,如果未能解决你的问题,请参考以下文章
在滚动视图中的自定义视图中使用触摸进行缩放。 touchesMoved 未调用