Wenn ich eine Zeile in einer anderen Aktivität wie R.layout.main hinzufügen möchte Wie kann ich hinzufügen?
Mohan
1
Das Layout Ihrer Aktivität muss ein View-Objekt enthalten - dann ist das kein Problem. Sie brauchen nur ein View-Objekt zum Zeichnen
DonGru
1
Ich möchte eine gerade Linie zeichnen. Wie kann ich den Wert startx start y stopx stopy angeben?
Mohan
Tatsächlich können Sie feststellen, dass in der Android-Entwicklerreferenz drawLine () die folgenden Argumente hat: drawLine (float startX, float startY, float stopX, float stopY, Paint paint)
DonGru
Mit dieser Methode zeichne ich eine Linie auf den Hintergrund. Ich möchte eine gezeichnete Linie löschen. Irgendwelche Vorschläge für mich. Kannst du mich vorschlagen?
tientuyen07
240
Wenn Sie eine einfache Linie in Ihrem Layout haben möchten, um zwei Ansichten zu trennen, können Sie eine generische Ansicht mit der Höhe und Breite der Linie und einer festgelegten Hintergrundfarbe verwenden.
Mit diesem Ansatz müssen Sie eine Ansicht nicht überschreiben oder einen Canvas selbst verwenden. Fügen Sie einfach und sauber die Zeile in XML hinzu.
Der von mir bereitgestellte Beispielcode generiert eine Linie, die den Bildschirm in der Breite ausfüllt und eine Höhe von 1 dp hat.
Wenn Sie Probleme mit dem Zeichnen der Linie auf kleinen Bildschirmen haben, sollten Sie die Höhe der Linie in px ändern. Das Problem ist, dass auf einem ldpi-Bildschirm die Linie 0,75 Pixel hoch ist. Manchmal kann dies zu einer Rundung führen, die die Linie verschwinden lässt. Wenn dies ein Problem für Ihr Layout ist, definieren Sie die Breite der Linie als Ressourcendatei und erstellen Sie eine separate Ressourcendatei für kleine Bildschirme, in der der Wert auf 1px anstelle von 1dp festgelegt wird.
Dieser Ansatz ist nur verwendbar, wenn Sie horizontale oder vertikale Linien möchten, die zum Teilen von Layoutelementen verwendet werden. Wenn Sie so etwas wie ein Kreuz erreichen möchten, das in ein Bild gezeichnet wird, funktioniert mein Ansatz nicht.
Wie kann zur Laufzeit dieselbe Ansicht hinzugefügt werden, die dynamisch ist?
Lakshmanan
Lakshmanan, geben Sie ihm eine ID und setzen Sie seine Sichtbarkeit auf View.GONE oder VISIBLE zur Laufzeit
Hatim
Mit dieser Lösung kann auch ein Kreuz erstellt werden. Fügen Sie einfach das Attribut "Rotation" gemäß dem gewünschten Kreuz hinzu und verwenden Sie zwei Ansichten.
Arpit J.
62
Es gibt zwei Möglichkeiten, wie Sie eine Linie zeichnen können, indem Sie a Canvasoder a verwenden View.
Wenn Sie nur eine gerade horizontale oder vertikale Linie benötigen, ist es möglicherweise am einfachsten, eine Viewin Ihrer XML-Layoutdatei zu verwenden. Sie würden so etwas tun:
Hier ist ein Bild mit zwei Linien (eine horizontale und eine vertikale), um zu zeigen, wie es aussehen würde:
Und hier ist das komplette XML-Layout dafür:
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:text="TextView1 in vertical linear layout"/><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:background="@android:color/black"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="10dp"android:text="TextView2 in vertical linear layout"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:layout_width="100dp"android:layout_height="100dp"android:padding="10dp"android:text="TextView3 in horizontal linear layout"/><Viewandroid:layout_width="1dp"android:layout_height="match_parent"android:background="@android:color/black"/><TextViewandroid:layout_width="100dp"android:layout_height="100dp"android:padding="10dp"android:text="TextView4 in horizontal linear layout"/></LinearLayout></LinearLayout>
du bist ein genialer Bruder ... Ich habe versucht herauszufinden, wie sie die Koordinaten erhalten, während ich eine Ansicht mit Farbe zeichne ... aber das Bild, das du gepostet hast, hat mir geholfen, es ziemlich gut zu verstehen ... Ist da Gibt es ein Online-Tool, um ein solches Diagramm zu simulieren, damit ich es beim Codieren verwende?
ist es möglich, einen Rückruf zu erhalten, um zu erfahren, dass die Ansicht fertig gezeichnet wurde
Ich versuche zwei verschiedene Linien zu zeichnen. Einmal, wenn die erste Linie gezeichnet wurde, muss ich die zweite zeichnen ...
Warum zeichnen Sie nicht beide Linien gleichzeitig in onDraw?
Suragch
1
@ tientuyen07, Wenn Sie verwenden, onDraw()umgeben Sie Ihren Zeichnungscode mit if (someCondition) { draw... }, machen Sie someCondition = falseund rufen invalidate()Sie dann Ihre Ansicht auf. Die Ansicht wird ohne die Linie neu gezeichnet.
Suragch
22
Sie können mehrere gerade Linien in der Ansicht zeichnen, indem Sie ein Beispiel für die Fingerfarbe verwenden, das sich in Developer android befindet.
Beispiel Link
Kommentar einfach: mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
Sie können gerade Linien zeichnen.
import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.graphics.Point;import android.os.Bundle;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.widget.ImageView;publicclassJoinPointsActivityextendsActivity{/** Called when the activity is first created. */Paint mPaint;floatMx1,My1;float x,y;@Overridepublicvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);// setContentView(R.layout.main);MyView view1 =newMyView(this);
view1.setBackgroundResource(R.drawable.image_0031_layer_1);
setContentView(view1);
mPaint =newPaint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(0xFFFF0000);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);// mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(10);}publicclassMyViewextendsView{privatestaticfinalfloat MINP =0.25f;privatestaticfinalfloat MAXP =0.75f;privateBitmap mBitmap;privateCanvas mCanvas;privatePath mPath;privatePaint mBitmapPaint;publicMyView(Context c){super(c);
mPath =newPath();
mBitmapPaint =newPaint(Paint.DITHER_FLAG);}@Overrideprotectedvoid onSizeChanged(int w,int h,int oldw,int oldh){super.onSizeChanged(w, h, oldw, oldh);
mBitmap =Bitmap.createBitmap(w, h,Bitmap.Config.ARGB_8888);
mCanvas =newCanvas(mBitmap);}@Overrideprotectedvoid onDraw(Canvas canvas){
canvas.drawColor(0xFFAAAAAA);// canvas.drawLine(mX, mY, Mx1, My1, mPaint);// canvas.drawLine(mX, mY, x, y, mPaint);
canvas.drawBitmap(mBitmap,0,0, mBitmapPaint);
canvas.drawPath(mPath, mPaint);}privatefloat mX, mY;privatestaticfinalfloat TOUCH_TOLERANCE =4;privatevoid touch_start(float x,float y){
mPath.reset();
mPath.moveTo(x, y);
mX = x;
mY = y;}privatevoid touch_move(float x,float y){float dx =Math.abs(x - mX);float dy =Math.abs(y - mY);if(dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE){// mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
mX = x;
mY = y;}}privatevoid touch_up(){
mPath.lineTo(mX, mY);// commit the path to our offscreen
mCanvas.drawPath(mPath, mPaint);// kill this so we don't double draw
mPath.reset();}@Overridepublicboolean onTouchEvent(MotionEventevent){float x =event.getX();float y =event.getY();switch(event.getAction()){caseMotionEvent.ACTION_DOWN:
touch_start(x, y);
invalidate();break;caseMotionEvent.ACTION_MOVE:
touch_move(x, y);
invalidate();break;caseMotionEvent.ACTION_UP:
touch_up();// Mx1=(int) event.getX();// My1= (int) event.getY();
invalidate();break;}returntrue;}}}
Kann mir jemand helfen, wie kann ich meine XML-Elemente in meiner Ansicht sehen, die sich im relativen Layout befinden? Sie können einfach das obige Beispiel durchgehen und mich vorschlagen.
Hema
9
package com.example.helloandroid;import android.app.Activity;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Bundle;import android.view.View;publicclassHelloAndroid2ActivityextendsActivity{/** Called when the activity is first created. */DrawView drawView;@Overridepublicvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
drawView =newDrawView(this);
drawView.setBackgroundColor(Color.WHITE);
setContentView(drawView);}classDrawViewextendsView{Paint paint =newPaint();publicDrawView(Context context){super(context);
paint.setColor(Color.BLUE);}@Overridepublicvoid onDraw(Canvas canvas){super.onDraw(canvas);
canvas.drawLine(10,20,30,40, paint);
canvas.drawLine(20,10,50,20, paint);}}}
sie sind beide gleich. Was macht den Unterschied zwischen vertikal und horizontal aus?
Burhan ARAS
@ Burhan ARAS - sie sind nicht gleich wie Breite und Höhe werden in zwei Ansichten geändert. Es werden nur vertikale und horizontale Linien gezeichnet.
Dann ist in meinen Layouts weniger Code und einfacher zu lesen.
<Viewstyle="@style/Divider"/>
Wenn Sie einen horizontalen Zeilenabstand ausführen möchten, gehen Sie wie oben beschrieben vor.
Und für eine vertikale Linie zwischen zwei Ansichten müssen Sie die Parameter (Attribute) von android: layout_width durch android: layout_height ersetzen
Antworten:
Dieser zeichnet 2 Linien, die oben links auf dem Bildschirm ein Kreuz bilden:
DrawView.java
Die Aktivität zum Starten:
StartDraw.java
quelle
Wenn Sie eine einfache Linie in Ihrem Layout haben möchten, um zwei Ansichten zu trennen, können Sie eine generische Ansicht mit der Höhe und Breite der Linie und einer festgelegten Hintergrundfarbe verwenden.
Mit diesem Ansatz müssen Sie eine Ansicht nicht überschreiben oder einen Canvas selbst verwenden. Fügen Sie einfach und sauber die Zeile in XML hinzu.
Der von mir bereitgestellte Beispielcode generiert eine Linie, die den Bildschirm in der Breite ausfüllt und eine Höhe von 1 dp hat.
Wenn Sie Probleme mit dem Zeichnen der Linie auf kleinen Bildschirmen haben, sollten Sie die Höhe der Linie in px ändern. Das Problem ist, dass auf einem ldpi-Bildschirm die Linie 0,75 Pixel hoch ist. Manchmal kann dies zu einer Rundung führen, die die Linie verschwinden lässt. Wenn dies ein Problem für Ihr Layout ist, definieren Sie die Breite der Linie als Ressourcendatei und erstellen Sie eine separate Ressourcendatei für kleine Bildschirme, in der der Wert auf 1px anstelle von 1dp festgelegt wird.
Dieser Ansatz ist nur verwendbar, wenn Sie horizontale oder vertikale Linien möchten, die zum Teilen von Layoutelementen verwendet werden. Wenn Sie so etwas wie ein Kreuz erreichen möchten, das in ein Bild gezeichnet wird, funktioniert mein Ansatz nicht.
quelle
Es gibt zwei Möglichkeiten, wie Sie eine Linie zeichnen können, indem Sie a
Canvas
oder a verwendenView
.Zeichnen einer Linie mit Leinwand
Aus der Dokumentation geht hervor , dass wir die folgende Methode verwenden müssen:
Hier ist ein Bild:
Das
Paint
Objekt gibt nur an,Canvas
welche Farbe die Linie malen soll, wie breit sie sein soll und so weiter.Hier ist ein Beispielcode:
Zeichnen einer Linie mit Ansicht
Wenn Sie nur eine gerade horizontale oder vertikale Linie benötigen, ist es möglicherweise am einfachsten, eine
View
in Ihrer XML-Layoutdatei zu verwenden. Sie würden so etwas tun:Hier ist ein Bild mit zwei Linien (eine horizontale und eine vertikale), um zu zeigen, wie es aussehen würde:
Und hier ist das komplette XML-Layout dafür:
quelle
onDraw()
umgeben Sie Ihren Zeichnungscode mitif (someCondition) { draw... }
, machen SiesomeCondition = false
und rufeninvalidate()
Sie dann Ihre Ansicht auf. Die Ansicht wird ohne die Linie neu gezeichnet.Sie können mehrere gerade Linien in der Ansicht zeichnen, indem Sie ein Beispiel für die Fingerfarbe verwenden, das sich in Developer android befindet. Beispiel Link
Kommentar einfach:
mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
Sie können gerade Linien zeichnen.quelle
quelle
für horizontale Linie im Layout:
für vertikale Linie im Layout:
quelle
Einfache Sache
quelle
Dies wird eine gerade horizontale Linie erzeugen, hoffe es hilft!.
quelle
Sie können eine Zeichnung wie Kreis, Linie, Rechteck usw. durch Formen in XML wie folgt erstellen:
quelle
Dieser Code fügt einem linearen Layout eine horizontale Linie hinzu
quelle
quelle
Verbesserung der Antworten von @Janusz
Ich habe dies zu meinen Stilen hinzugefügt:
Dann ist in meinen Layouts weniger Code und einfacher zu lesen.
Wenn Sie einen horizontalen Zeilenabstand ausführen möchten, gehen Sie wie oben beschrieben vor.
Und für eine vertikale Linie zwischen zwei Ansichten müssen Sie die Parameter (Attribute) von android: layout_width durch android: layout_height ersetzen
quelle
Ein weiterer Ansatz zum programmgesteuerten Zeichnen einer Linie mit ImageView
quelle
Wenn Sie mit arbeiten
ConstraintLayout
, müssen Sie mindestens zwei Einschränkungen definieren, damit die Zeile angezeigt wird. So was:Obwohl ich 3 Einschränkungen definiert habe.
quelle
oder wenn Sie nur eine Linie wollen
quelle