我有一个图像视图(为其分配一个位图)和另一个用于绘画的位图(透明)。如何在同一时间滚动此位图和背景位图以便在不同的地方绘制。
答案 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作为保存位图的基础。 我们在它上面添加一个自定义绘制视图并在其上绘制我们的绘图。当我们想要清除绘图时,如果需要再次绘制,我们删除绘制视图并添加另一个。 这可能不是最有效的方式。但是应该让你开始。