#android #canvas
#Android #холст
Вопрос:
Я пытаюсь нарисовать одну строку в Android с помощью canvas
Мой класс :
public class LineDrawer extends View {
public LineDrawer(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setStrokeWidth(10);
float left = 20;
float top = 20;
float right = 50;
float bottom = 100;
canvas.drawLine(left, top, right, bottom, paint);
}
}
Моя основная деятельность :
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LineDrawer lineDrawer = new LineDrawer(this);
setContentView(R.layout.activity_Main);
}
}
Я не могу найти, в чем проблема, я пробую все решения в Интернете, но ничего не происходит, все еще пустое действие..
Должен ли я импортировать некоторый код?
Комментарии:
1.
setContentView(lineDrawer)
2. что, если я хочу использовать XML-файл для этого действия?
3. поэтому используйте
setContentView(R.layout.activity_Main)
Ответ №1:
lineDrawer
создается, но нигде не добавляется. Недостаточно просто создать представление, вам нужно добавить его к текущим отображаемым представлениям, которые будут учтены и нарисованы. У вас есть два варианта:
-
Добавьте ее в свой XML-макет. Вам нужно будет добавить следующий конструктор в свой пользовательский вид.
public LineDrawer(Context context, AttributeSet attrs) {
super(context, attrs);
} - Используйте addView(). В любом случае, учитывая, насколько прост ваш пример, я буду использовать первый (общий) метод.
В качестве дополнительного комментария Paint paint
объект должен быть создан при инициализации представления, поскольку это дорогостоящая операция. Дополнительную информацию об этом см. В оригинальной документации.
Комментарии:
1. когда экземпляр создается из наследования класса от представления, когда компилятор пытается нарисовать представление, он переходит к методу onDraw() , не так ли?
2. Недостаточно просто создать класс, вам нужно добавить его в текущие отображаемые представления, которые будут учтены и отрисованы. Кроме того, просто для корректности, компилятор ничего не рисует, это ОС. Я отредактировал ответ.
3. спасибо, но не могли бы вы сказать мне, как добавить эту строку в мое представление? addContentView принимает два параметра context и LayoutParms
4. Как я уже сказал, самый простой способ — это использовать непосредственно в вашем макете activity_Main. Вы должны найти ее в res / layout / activity_Main в структуре вашего проекта. Откройте его, скопируйте и вставьте XML-файл в свой вопрос. Вы должны поместить тег, похожий на
<your.package.LineDrawer android:layout_width="wrap_content" android:layout_height="wrap_content" />
(обратите внимание, что тег закрывается символом / в конце).