znieh99
Fortgeschrittenes Mitglied
- 12
Hallo Forum,
mir ist das Zusammenspiel zwischen View, Canvas und onDraw trotz stundenlangen lesen immer noch nicht klar. Darum möchte ich ganz einfach eine Linie mittels Canvas in einem View zeichnen.
Im nachstehender Code habe ich versucht das auf einfachste Weise (aus meiner Sicht) zu realisieren. Der Ablauf ist bis zur Methode "DrawLine.draw" zu verfolgen, dann passiert nichts mehr. Ich hoffe ihr könnt mir diese Zusammenhängen besser erklären,
lg Heinz
Das zugehörige Layout:
mir ist das Zusammenspiel zwischen View, Canvas und onDraw trotz stundenlangen lesen immer noch nicht klar. Darum möchte ich ganz einfach eine Linie mittels Canvas in einem View zeichnen.
Im nachstehender Code habe ich versucht das auf einfachste Weise (aus meiner Sicht) zu realisieren. Der Ablauf ist bis zur Methode "DrawLine.draw" zu verfolgen, dann passiert nichts mehr. Ich hoffe ihr könnt mir diese Zusammenhängen besser erklären,
lg Heinz
Code:
package com.example.heinz.testgraphic;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Layout;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.LinearLayout;
import static android.graphics.Color.BLACK;
public class MainActivity extends AppCompatActivity {
private LinearLayout mLayout;
private DrawLine mDrawLine;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLayout = (LinearLayout)findViewById(R.id.activity_main);
mDrawLine = new DrawLine(this, null);
mLayout.addView(mDrawLine); // <-- wird das eine ansprechbare View ?
} //end onCreate -------------------------------------------
/**
* Reaktion auf Click Button
* @param Button
*/
public void onStartPaint(View Button) {
mDrawLine.draw();
} //end onStartPaint ---------------------------------------
/**
* Diese Class zeichnet (hoffentlich)
*/
protected class DrawLine extends View {
private Canvas mCanvas; // <-- notwendig ?, wie mit onDraw verbinden ?
/**
* Constructor
* @param context
*/
public DrawLine(Context context, AttributeSet attrs) { // <-- attr ist null, notwendig ?
super(context, attrs);
} //end Constructor
public void draw() {
invalidate(); // <-- bis hierher kommt der Ablauf. und dann ?
} //end draw ----------------------------------------------
@Override
protected void onDraw(Canvas canvas) {
Paint mPaint = new Paint();
mPaint.setColor(BLACK);
mPaint.setStrokeWidth(4);
canvas.drawLine(10, 50, 100, 50, mPaint);
} //end onDraw ---------------------------------------------
} //end C DrawClass --------------------------------------------
} //end C MainActivity ---------------------------------------------
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.example.heinz.testgraphic.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onStartPaint"
android:text="@string/start_paint" />
</LinearLayout>