如何在android中滚动和缩放画布内容?

时间:2014-06-16 07:40:11

标签: android canvas scroll zoom

我有自定义视图,加载此视图时,我将位图绘制到画布中,这个位图是根据pdf页面的长度和大小绘制的。我为用户提供了2个按钮,用于绘制路径和在画布上绘制文本。

以两种方式将此视图添加到我的父级中:

1。在父布局中创建子布局(LinearLayout或RelativeLayout),并在CustomView中以编程方式添加Scroller并将自定义视图添加到childLayout中。

xml布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_pdf_viewer_parent_relative_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<LinearLayout
    android:id="@+id/custom_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
</LinearLayout>

/RelativeLayout>

2。在Parent布局中创建子布局(Horizo​​ntal Scrollview内的ScrollView)并将自定义视图添加到childLayout(ScrollView)中。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >


<com.pakagename.CustomHorizontalScrillView
    android:id="@+id/pages_horizontal_scroll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/top_buttons_layout"
    android:fillViewport="true" >

    <com.pakagename.CustomVerticalScrollView
        android:id="@+id/pages_vertical_scrollview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true" />

</com.cudrivepdfeditor.CustomHorizontalScrillView>

   </RelativeLayout>

为了向画布添加滚动,我使用onMeasure(int widthMeasureSpec,int heightMeasureSpec)。

在第一种情况下:

但是这个onMeasure在第一种情况下不起作用。因为自定义视图以编程方式添加到LinearLayout.But中,所以我将滚动条添加到自定义视图中。我不知道为什么onMeasure不起作用。但是在调试模式widthMeasureSpec中,heightMeasureSpec不是null而不是0那些具有不同的值是什么确切的文件有。

在第二种情况下:

在这种情况下,我将自定义视图添加到我的verticalscrollview中,这个verticalscrollview放在horizantalscrollview中。在这种情况下onMeasure()方法调用多次,它将滚动添加到customview和canvas.Canvas内容也滚动到我的时候滚动。

但在我的情况下我也有缩放功能。当我点击缩放++按钮画布不缩放而onMeasure()也没有给出适当的宽度和高度。

在我的缩放++()中我调用了measure(requiredWidth,requiredHeight)方法。

如何滚动和缩放画布内容?任何人都有任何想法请帮助我。我很长时间都坚持使用此功能。

编辑#1:

@Override
public void onDraw(Canvas canvas) {

    drawPages(canvas); // This drawPages(canvas) method draw a pages on canvas 

}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    this.width = w;
    this.height = h;

    mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    mCanvas = new Canvas(mBitmap); // Here I am creating new bitmap on canvas and I am drawing paths and text on this canvas.

}

这里我的问题是当我在onDraw()的画布上绘制路径时,它会画一条路径,但是当我触摸到路径是休息时。如果我在mCanvas上画一条路径它的绘图路径,它没有重置。但我如何用onDraw()画布滚动这个mCanvas。

0 个答案:

没有答案