Android绘图/绘画应用程序立即更新?

时间:2011-12-03 04:57:25

标签: java android events canvas draw

我正在写一个简单的绘图应用程序。一切都很好,除了我画画时我只能看到它,因为我停止触摸屏幕。我在画画时看不到画面?任何想法?

这是onTouchListener:

public boolean onTouch(View view, MotionEvent motionEvent) {
    if(motionEvent.getAction() == MotionEvent.ACTION_DOWN){
        currentDrawingPath = new DrawingPath();
        currentDrawingPath.paint = currentPaint;
        currentDrawingPath.path = new Path();
        currentBrush.mouseDown(currentDrawingPath.path, motionEvent.getX(), motionEvent.getY());


    }else if(motionEvent.getAction() == MotionEvent.ACTION_MOVE){
        currentBrush.mouseMove( currentDrawingPath.path, motionEvent.getX(), motionEvent.getY() );

    }else if(motionEvent.getAction() == MotionEvent.ACTION_UP){
        currentBrush.mouseUp( currentDrawingPath.path, motionEvent.getX(), motionEvent.getY() );


        drawingSurface.addDrawingPath(currentDrawingPath);
        drawingSurface.isDrawing = true;
        undoBtn.setEnabled(true);
        redoBtn.setEnabled(false);
    }
    return true;
}

这是DrawingPath类:

public class DrawingPath {
    public Path path;
    public Paint paint;

    public void draw(Canvas canvas) {  
        canvas.drawPath( path, paint );
     }
}

这是主要的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

<com.meadows.collin.touchtopaint.DrawingSurface
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/drawingSurface" />

<LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" 
        android:layout_centerHorizontal="true">

    <ImageButton
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:onClick="onClick"
            android:id="@+id/colorRedBtn"
            android:background="@drawable/red_btn" />

    <ImageButton
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:onClick="onClick"
            android:id="@+id/colorBlueBtn"
            android:background="@drawable/blue_btn" />

    <ImageButton
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:onClick="onClick"
            android:id="@+id/colorGreenBtn"
            android:background="@drawable/green_btn" />

    <ImageButton
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:onClick="onClick"
            android:id="@+id/colorYellowBtn"
            android:background="@drawable/yellow_btn" />       

    <Button
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="U"
            android:onClick="onClick"
            android:id="@+id/undoBtn" />

    <Button
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="R"
            android:onClick="onClick"
            android:id="@+id/redoBtn" />

    <Button
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="S"
            android:onClick="onClick"
            android:id="@+id/saveBtn" />

     <Button
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="P"
            android:onClick="onClick"
            android:id="@+id/pathBtn" />

     <Button
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="C"
            android:onClick="onClick"
            android:id="@+id/circleBtn" />

    </LinearLayout>
</RelativeLayout>

1 个答案:

答案 0 :(得分:1)

尝试在MotionEvent.ACTION_MOVE案例中使用draw(Canvas画布)

在这里我做了什么,经过测试,结果显示(绘制)了每个动作:

private LinearLayout ll1;
private FrameLayout layout;

private float xAxis = 0;
private float yAxis = 0;

private LinearLayout newLinearLayout;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    layout = (FrameLayout) findViewById(R.id.LinearLayout01);

    ll1 = (LinearLayout) findViewById(R.id.ll);
    newLinearLayout = ll1;

    ll1.setOnTouchListener(this);
}

public void redraw() {
    mainLayout.removeAllViews();

    newLinearLayout.setPadding((int) xAxis, (int) yAxis, 0, 0);

    mainLayout.addView(newLinearLayout);

}

@Override
public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_MOVE:
        xAxis = event.getX();
        yAxis = event.getY();
        redraw();

    case MotionEvent.ACTION_UP:
        System.out.println("intermediate finished");

    }
    return true;
}

的xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center" >

    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Testing" />
    </LinearLayout>

</FrameLayout>