si je veux ajouter une ligne dans une autre activité comme R.layout.main Comment puis-je ajouter?
mohan
1
la mise en page de votre activité doit contenir un objet View - alors ce n'est pas un problème. Vous avez juste besoin d'un objet View sur
lequel
1
Je veux tracer une ligne droite, comment puis-je donner la valeur startx start y stopx stopy?
mohan
en fait, vous pouvez trouver que dans la référence du développeur Android, drawLine () a les arguments suivants: drawLine (float startX, float startY, float stopX, float stopY, Paint paint)
DonGru
Je trace une ligne sur le fond en utilisant cette méthode. Je veux effacer une ligne dessinée. Toutes suggestions pour moi. Pouvez-vous me suggérer?
tientuyen07
240
Si vous souhaitez avoir une simple ligne dans votre mise en page pour séparer deux vues, vous pouvez utiliser une vue générique avec la hauteur et la largeur souhaitées pour la ligne et une couleur d'arrière-plan définie.
Avec cette approche, vous n'avez pas besoin de remplacer une vue ou d'utiliser vous-même un canevas, simplement et ajoutez la ligne en xml.
L'exemple de code que j'ai fourni générera une ligne qui remplit l'écran en largeur et a une hauteur d'un dp.
Si vous rencontrez des problèmes avec le tracé de la ligne sur de petits écrans, envisagez de changer la hauteur de la ligne en px. Le problème est que sur un écran ldpi, la ligne aura une hauteur de 0,75 pixel. Parfois, cela peut entraîner un arrondi qui fait disparaître la ligne. Si cela pose un problème pour votre mise en page, définissez la largeur de la ligne dans un fichier de ressources et créez un fichier de ressources séparé pour les petits écrans qui définit la valeur à 1px au lieu de 1dp.
Cette approche n'est utilisable que si vous souhaitez des lignes horizontales ou verticales utilisées pour diviser les éléments de mise en page. Si vous voulez réaliser quelque chose comme une croix qui est dessinée dans une image, mon approche ne fonctionnera pas.
Comment ajouter la même vue au moment de l'exécution de manière dynamique?
Lakshmanan
Lakshmanan, donnez-lui un identifiant et définissez sa visibilité sur View.GONE ou VISIBLE au moment de l'exécution
Hatim
Une croix peut également être faite avec cette solution, ajoutez simplement l'attribut "rotation" en elle selon la croix que vous voulez et utilisez deux vues.
Arpit J.
62
Il existe deux manières principales de tracer une ligne, en utilisant a Canvasou en utilisant a View.
Dessiner une ligne avec un canevas
D'après la documentation, nous voyons que nous devons utiliser la méthode suivante:
Si vous n'avez besoin que d'une ligne droite horizontale ou verticale, le moyen le plus simple peut être d'utiliser simplement un Viewdans votre fichier de mise en page xml. Vous feriez quelque chose comme ceci:
Voici une image avec deux lignes (une horizontale et une verticale) pour montrer à quoi cela ressemblerait:
Et voici la mise en page XML complète pour cela:
<?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>
vous êtes un frère de génie ... J'ai essayé de comprendre comment ils obtiennent les coordonnées tout en dessinant une vue à l'aide de peinture ... mais l'image que vous avez postée m'a aidé à le comprendre à peu près ... un outil en ligne pour simuler un tel graphique afin que je l'utilise pendant le codage?
est-il possible d'obtenir un rappel pour savoir que la vue a été terminée dessin
J'essaye de dessiner deux lignes différentes. Une fois que si la première ligne a été dessinée, je dois dessiner la seconde ...
Pourquoi ne dessinez-vous pas les deux lignes dans le même onDraw?
Suragch
1
@ tientuyen07, Si vous utilisez, onDraw()entourez votre code de dessin avec if (someCondition) { draw... }, créez someCondition = false, puis appelez invalidate()votre vue. Il redessine la vue sans la ligne.
Suragch
22
Vous pouvez dessiner plusieurs lignes droites sur la vue en utilisant l'exemple de peinture Finger qui se trouve dans Developer Android.
lien d'exemple
Juste un commentaire: mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
vous pourrez tracer des lignes droites.
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;}}}
Quelqu'un peut-il m'aider comment puis-je voir mes éléments XML sur ma vue qui sont sur une mise en page relative ?? Vous pouvez simplement passer par l'exemple ci-dessus et me suggérer.
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);}}}
Réponses:
Celui-ci trace 2 lignes qui forment une croix en haut à gauche de l'écran:
DrawView.java
L'activité pour le démarrer:
StartDraw.java
la source
Si vous souhaitez avoir une simple ligne dans votre mise en page pour séparer deux vues, vous pouvez utiliser une vue générique avec la hauteur et la largeur souhaitées pour la ligne et une couleur d'arrière-plan définie.
Avec cette approche, vous n'avez pas besoin de remplacer une vue ou d'utiliser vous-même un canevas, simplement et ajoutez la ligne en xml.
L'exemple de code que j'ai fourni générera une ligne qui remplit l'écran en largeur et a une hauteur d'un dp.
Si vous rencontrez des problèmes avec le tracé de la ligne sur de petits écrans, envisagez de changer la hauteur de la ligne en px. Le problème est que sur un écran ldpi, la ligne aura une hauteur de 0,75 pixel. Parfois, cela peut entraîner un arrondi qui fait disparaître la ligne. Si cela pose un problème pour votre mise en page, définissez la largeur de la ligne dans un fichier de ressources et créez un fichier de ressources séparé pour les petits écrans qui définit la valeur à 1px au lieu de 1dp.
Cette approche n'est utilisable que si vous souhaitez des lignes horizontales ou verticales utilisées pour diviser les éléments de mise en page. Si vous voulez réaliser quelque chose comme une croix qui est dessinée dans une image, mon approche ne fonctionnera pas.
la source
Il existe deux manières principales de tracer une ligne, en utilisant a
Canvas
ou en utilisant aView
.Dessiner une ligne avec un canevas
D'après la documentation, nous voyons que nous devons utiliser la méthode suivante:
Voici une image:
L'
Paint
objet indique simplement deCanvas
quelle couleur peindre la ligne, quelle doit être sa largeur, etc.Voici un exemple de code:
Tracer une ligne avec vue
Si vous n'avez besoin que d'une ligne droite horizontale ou verticale, le moyen le plus simple peut être d'utiliser simplement un
View
dans votre fichier de mise en page xml. Vous feriez quelque chose comme ceci:Voici une image avec deux lignes (une horizontale et une verticale) pour montrer à quoi cela ressemblerait:
Et voici la mise en page XML complète pour cela:
la source
onDraw()
entourez votre code de dessin avecif (someCondition) { draw... }
, créezsomeCondition = false
, puis appelezinvalidate()
votre vue. Il redessine la vue sans la ligne.Vous pouvez dessiner plusieurs lignes droites sur la vue en utilisant l'exemple de peinture Finger qui se trouve dans Developer Android. lien d'exemple
Juste un commentaire:
mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
vous pourrez tracer des lignes droites.la source
la source
pour la ligne horizontale sur la mise en page:
pour la ligne verticale sur la mise en page:
la source
Simple
la source
Cela créera une ligne horizontale droite, espérons que cela aidera !.
la source
Vous pouvez créer un dessin comme un cercle, une ligne, un rectangle, etc. à travers des formes en XML comme suit:
la source
ce code ajoute une ligne horizontale à une disposition linéaire
la source
la source
Pour améliorer les réponses apportées par @Janusz
J'ai ajouté ceci à mes styles:
Ensuite, dans mes mises en page, il y a moins de code et plus simple à lire.
si vous voulez faire un interligne horizontal, procédez comme suit.
Et pour la ligne verticale entre deux vues, vous devez remplacer android: paramètres (attributs) layout_width par android: layout_height
la source
Une autre approche pour tracer une ligne par programme en utilisant ImageView
la source
Si vous travaillez avec,
ConstraintLayout
vous devez définir au moins 2 contraintes pour que la ligne apparaisse. Comme ça:Bien que j'aie défini 3 contraintes.
la source
ou si vous voulez juste une ligne
la source