具有自定义视图的 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?的主要内容,如果未能解决你的问题,请参考以下文章

将自定义视图放入自定义 ScrollView

ScrollView v 自定义转换 (Swift)

在滚动视图中的自定义视图中使用触摸进行缩放。 touchesMoved 未调用

两个 ScrollView 在彼此之上?

Kivy:如何从自定义 BoxLayout 显示 ScrollView?

允许滚动视图的高度根据图像大小而改变