Рисование элементов на Canvas для разных диагоналей смартфонов
У меня есть Активити на котором, в зависимости от введенных параметров, рисуется график. Опорные точки этого графика можно двигать. Вот примерно так это выглядит:
Не будем вдаваться в подробности что это и для чего, перейдем сразу к сути
Верхняя часть экрана - это ConstraintLayout, который я создаю в xml-файле. Я закидываю его на мою основную вьюшку:
LinearLayout mainLayer;
View layer1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//setContentView(new DrawView(this));
mainLayer = (LinearLayout) findViewById(R.id.master);
LayoutInflater inflater = getLayoutInflater();
layer1 = inflater.inflate(R.layout.layer1, null);
mainLayer.addView(layer1);
Затем я, по нажатию на кнопку, на вьюшку добавляю рисунок. Этот рисунок рисуется в классе:
class DrawView extends View {
Paint p;
public DrawView(Context context) {
super(context);
//задаем перо для рисования
p = new Paint(Paint.ANTI_ALIAS_FLAG);
p2 = new Paint(p);
p2.setStrokeWidth(4);
p2.setColor(Color.BLACK);
p2.setPathEffect(new DashPathEffect(new float[]{30, 10}, 0));
}
public void onDraw(Canvas canvas) {
//Пример того как я рисую вот эту черную штуку справа
canvas.drawLine(1150, height / 2 + 100, 1150, 20, p3);
canvas.drawLine(1150, 20, 1320, 20, p3);
canvas.drawLine(1320, 20, 1320, height / 2 - 30, p3);
canvas.drawLine(1320, height / 2 - 30, 1360, height / 2 - 30, p3);
canvas.drawLine(1150, yC, 1260, yC, p3 );
}
//Двигаю точки
@Override
public boolean onTouchEvent(MotionEvent event) {
float X = event.getX();
float Y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//Если попал в пределы точки, то можно двигать
break;
case MotionEvent.ACTION_MOVE:
// запрещаем двигать другие точки и перерисовываем нажатую
case MotionEvent.ACTION_UP:
break;
}
return true;
}}
Как вы видите, я все рисую по пикселям, чтобы отображалось все красиво. Но, вы уже, наверно, поняли, что, когда я включаю программу на другом устройстве, то большая часть рисунка у меня за пределами экрана.
Подобная проблема не только с самим рисованием, но и, например, с пером, размер которого для устройства с меньшей диагональю является большим, когда для данного устройства он идеален.
Вопрос: Как мне сделать так, чтобы данный рисунок у меня полностью влезал как на устройство с размерами 2160х1440 пикселей, так и на устройство с меньшим размером?
У меня два, возможно, глупых предположения:
1) Поместить все это в некий "контейнер", который будет принимать размер экрана, но проблема в том, что я рисую по пикселям! Значит надо рисовать другим образом, а как именно? Пока я не смог найти решение
2) Производить расчет... Ну то есть каким-то образом расчитывать положение рисунка в зависимости от размера экрана. Грубо говоря, если экран 2000х1000 пикселей, то рисунок будет в положении х:400 y:200, если экран уменьшается, то и координаты тоже уменьшаются. Но тоже способ так себе...
