如何滚动位图?

时间:2011-08-22 10:51:32

标签: android bitmap scroll

我有一个图像视图(为其分配一个位图)和另一个用于绘画的位图(透明)。如何在同一时间滚动此位图和背景位图以便在不同的地方绘制。

1 个答案:

答案 0 :(得分:0)

据我所知,你试图在图像上绘制。如果是这种情况,请创建自定义视图并使用BitmapFactory获取图像。获取位图对象后,使用其复制方法并将该副本用于视图的画布。    现在,您可以覆盖自定义视图的onDraw方法,并在其上绘制任何内容。

此视图可以添加到布局中,并且会在视图中滚动。

编辑:示例代码

好的,这是一些可能对您有帮助的代码。我没有时间浏览所有代码。 但我试图了解你的要求。

我正在展示一个活动的代码,它的xml和自定义视图

Activity.java

public class DrawDemo extends Activity {
    private FrameLayout container;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.draw_demo_layout);

        container = (FrameLayout)findViewById(R.id.sc);        
        container.addView(new DrawView(this));
    }

    public void drawHandler(View target){
        container.addView(new DrawView(this));
    }

    public void clearHandler(View target){
        if(container.getChildCount() != 1){
            container.removeViewAt(container.getChildCount()-1);
        }
    }
}

draw_demo_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:orientation="vertical">
    <FrameLayout android:orientation="vertical"
        android:layout_width="fill_parent" android:layout_height="0dip" 
        android:id="@+id/sc" android:scrollbars="horizontal"  
        android:layout_weight="1.0">
        <ImageView android:layout_width="fill_parent" 
            android:layout_height="fill_parent"
            android:src="@drawable/chips"/>
    </FrameLayout>
    <Button android:layout_width="fill_parent" 
        android:layout_height="wrap_content" android:text="Draw"
        android:onClick="drawHandler"/>
    <Button android:layout_width="fill_parent" 
        android:layout_height="wrap_content" android:text="Clear"
        android:onClick="clearHandler"/>     
</LinearLayout>

DrawView.java

public class DrawView extends View {

    public DrawView(Context context) {
        super(context);
        setLayoutParams(new LayoutParams(LinearLayout.LayoutParams.FILL_PARENT
            ,LinearLayout.LayoutParams.FILL_PARENT)); 
    }

    public DrawView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override 
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint p = new Paint();
        p.setColor(Color.RED);
        p.setStrokeWidth(5);
        canvas.drawLine(50, 50, 100, 150, p);
        canvas.drawLine(100, 150, 20, 50, p);
    }
}

此活动有一个framelayout,它有一个imageview作为保存位图的基础。 我们在它上面添加一个自定义绘制视图并在其上绘制我们的绘图。当我们想要清除绘图时,如果需要再次绘制,我们删除绘制视图并添加另一个。     这可能不是最有效的方式。但是应该让你开始。