если я хочу добавить строку в какой-либо другой деятельности, как R.layout.main Как я могу добавить?
Мохан
1
макет вашей деятельности должен содержать объект View - тогда это не проблема. Вам просто нужен объект View для рисования
DonGru
1
Я хочу нарисовать прямую линию, как я могу дать значение startx start y stopx stopy?
Мохан
на самом деле вы можете найти, что в справочнике разработчика Android, drawLine () имеет следующие аргументы: drawLine (float startX, float startY, float stopX, float stopY, Paint paint)
DonGru
Я рисую линию на фоне, используя этот метод. Я хочу стереть нарисованную линию. Любые предложения для меня. Можете ли вы предложить мне?
tientuyen07
240
Если вы хотите иметь простую линию в макете, чтобы разделить два вида, вы можете использовать общий вид с высотой и шириной, которые должны иметь линия, и заданным цветом фона.
При таком подходе вам не нужно переопределять View или использовать Canvas самостоятельно, просто и просто добавьте строку в xml.
Пример кода, который я предоставил, сгенерирует строку, которая заполняет экран по ширине и имеет высоту в один пункт.
Если у вас есть проблемы с прорисовкой линии на маленьких экранах, рассмотрите возможность изменения высоты линии на px. Проблема в том, что на экране ldpi линия будет иметь высоту 0,75 пикселя. Иногда это может привести к округлению, которое делает линию исчезающей. Если это проблема для вашего макета, определите ширину строки в файле ресурсов и создайте отдельный файл ресурсов для небольших экранов, который устанавливает значение 1px вместо 1dp.
Этот подход применим только в том случае, если вы хотите использовать горизонтальные или вертикальные линии, которые используются для разделения элементов макета. Если вы хотите достичь чего-то вроде креста, который будет нарисован на изображении, мой подход не сработает.
Если вам нужна только прямая горизонтальная или вертикальная линия, то самый простой способ - это просто использовать Viewв вашем файле макета XML. Вы бы сделали что-то вроде этого:
Вот изображение с двумя линиями (одна горизонтальная и одна вертикальная), чтобы показать, как это будет выглядеть:
И вот полный макет XML для этого:
<?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>
Вы гений, братан ... Я пытался выяснить, как они получают координаты при рисовании вида с помощью краски ... но картинка, которую вы разместили, помогла мне понять это в значительной степени ... любой онлайн-инструмент для имитации такого графика, поэтому я использую его во время кодирования?
Можно ли получить обратный вызов, чтобы узнать, что представление было завершено рисование
Я пытаюсь нарисовать две разные линии. Однажды, если была нарисована первая линия, я должен нарисовать вторую ...
Почему бы вам не нарисовать обе линии в одном и том же onDraw?
Сурагч
1
@ tientuyen07, Если вы используете, onDraw()то окружите свой код для рисования if (someCondition) { draw... }, сделайте someCondition = false, а затем вызовите invalidate()свой вид. Это перерисовает вид без линии.
Сурагч,
22
Вы можете нарисовать несколько прямых линий на виде, используя пример рисования пальцем, который находится в Android разработчика.
пример ссылки
Просто комментарий: mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
вы сможете рисовать прямые линии.
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;}}}
Может ли кто-нибудь помочь мне, как я могу увидеть мои элементы XML на моем представлении, которые находятся на относительной компоновке? Вы можете просто пройти вышеупомянутый пример и предложить мне.
Хема
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);}}}
Ответы:
Эта линия рисует 2 линии, которые образуют крест в левом верхнем углу экрана:
DrawView.java
Деятельность, чтобы начать это:
StartDraw.java
источник
Если вы хотите иметь простую линию в макете, чтобы разделить два вида, вы можете использовать общий вид с высотой и шириной, которые должны иметь линия, и заданным цветом фона.
При таком подходе вам не нужно переопределять View или использовать Canvas самостоятельно, просто и просто добавьте строку в xml.
Пример кода, который я предоставил, сгенерирует строку, которая заполняет экран по ширине и имеет высоту в один пункт.
Если у вас есть проблемы с прорисовкой линии на маленьких экранах, рассмотрите возможность изменения высоты линии на px. Проблема в том, что на экране ldpi линия будет иметь высоту 0,75 пикселя. Иногда это может привести к округлению, которое делает линию исчезающей. Если это проблема для вашего макета, определите ширину строки в файле ресурсов и создайте отдельный файл ресурсов для небольших экранов, который устанавливает значение 1px вместо 1dp.
Этот подход применим только в том случае, если вы хотите использовать горизонтальные или вертикальные линии, которые используются для разделения элементов макета. Если вы хотите достичь чего-то вроде креста, который будет нарисован на изображении, мой подход не сработает.
источник
Есть два основных способа нарисовать линию, используя
Canvas
илиView
.Рисование линии холстом
Из документации мы видим, что нам нужно использовать следующий метод:
Вот картинка:
Paint
Объект просто говоритCanvas
, что цвет , чтобы нарисовать линию, насколько широко она должна быть, и так далее.Вот пример кода:
Рисование линии с помощью вида
Если вам нужна только прямая горизонтальная или вертикальная линия, то самый простой способ - это просто использовать
View
в вашем файле макета XML. Вы бы сделали что-то вроде этого:Вот изображение с двумя линиями (одна горизонтальная и одна вертикальная), чтобы показать, как это будет выглядеть:
И вот полный макет XML для этого:
источник
onDraw()
то окружите свой код для рисованияif (someCondition) { draw... }
, сделайтеsomeCondition = false
, а затем вызовитеinvalidate()
свой вид. Это перерисовает вид без линии.Вы можете нарисовать несколько прямых линий на виде, используя пример рисования пальцем, который находится в Android разработчика. пример ссылки
Просто комментарий:
mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
вы сможете рисовать прямые линии.источник
источник
для горизонтальной линии на макете:
для вертикальной линии на макете:
источник
Простой
источник
Это создаст прямую горизонтальную линию, надеюсь, это поможет!
источник
Вы можете сделать рисованный круг, линию, прямоугольник и т. Д. С помощью фигур в XML следующим образом:
источник
этот код добавляет горизонтальную линию в линейный макет
источник
источник
Чтобы улучшить ответы, предоставленные @Janusz
Я добавил это в мои стили:
Тогда в моих макетах меньше кода и проще для чтения.
если вы хотите сделать горизонтальный межстрочный интервал, то сделайте выше.
И для вертикальной линии между двумя представлениями вы должны заменить параметры android: layout_width (атрибуты) на android: layout_height
источник
Другой подход к прорисовке линии с помощью ImageView
источник
Если вы работаете с
ConstraintLayout
вами, вам нужно определить как минимум 2 ограничения для строки, которая будет отображаться. Как это:Хотя я определил 3 ограничения.
источник
или если вы просто хотите линию
источник