Я хочу сделать ImageView с мультитачем. Я сделал ontouchlistener, чтобы получить координаты x и y для места касания и дать ему реакцию для каждой области. Он отлично работает на экране 1080*1960, но для 720*1276 координаты меняются, и все идет не так. Любые идеи?
ImageView
Часть кода
float x = motionEvent.getX();
float y = motionEvent.getY();
String message = String.format("Coordinates: (%.2f, %.2f)",x,y);
//Toast.makeText(Study.this,message,Toast.LENGTH_SHORT).show();
//To make the image clickable by Coordinates of touch
if (x> 179 && x< 405 && y> 37 && y< 145 ){
Toast.makeText(Study.this,"prep",Toast.LENGTH_SHORT).show();
}else if (x>= 405 && x < 550 && y >= 30 && y <135){
Toast.makeText(Study.this,"1",Toast.LENGTH_SHORT).show();
}else if (x>= 570 && x < 684 &&y >= 49 && y < 190){
Toast.makeText(Study.this,"2",Toast.LENGTH_SHORT).show();
}else if (x>= 675 && x < 822 &&y >= 143 && y < 315){
Toast.makeText(Study.this,"3",Toast.LENGTH_SHORT).show();
}else if (x>= 757 && x < 870 &&y >= 290 && y < 447){
Toast.makeText(Study.this,"4",Toast.LENGTH_SHORT).show();
}else if (x>= 346 && x < 686 &&y >= 760 && y < 845){
Toast.makeText(Study.this,"1st",Toast.LENGTH_SHORT).show();
}else if (x>= 30 && x < 240 &&y >= 460 && y < 850){
Toast.makeText(Study.this,"2nd",Toast.LENGTH_SHORT).show();
}else if (x>= 240 && x < 755 &&y >= 150 && y < 750) {
}
return false;




Используйте следующие строки кода, чтобы получить плотность пикселей, ширину в пикселях и высоту в пикселях экрана:
public static final double SCALE = Resources.getSystem().getDisplayMetrics().density;
public static final int WIDTH = Resources.getSystem().getDisplayMetrics().widthPixels;
public static final int HEIGHT = Resources.getSystem().getDisplayMetrics().heightPixels;
Теперь используйте эти константы в операторах if следующим образом:
if ((x > WIDTH / 2 - SCALE * 50) && (x < WIDTH / 2 + SCALE * 50) && (Y > HEIGHT/ 2 - SCALE * 50) && (Y < HEIGHT/ 2 + SCALE * 50)){
Toast.makeText(Study.this,"prep",Toast.LENGTH_SHORT).show();
}
В приведенном выше коде тост будет отображаться, если пользователь коснется квадрата шириной 100 и высотой 100, расположенного по центру экрана.
Размер и относительное положение этого квадрата будут одинаковыми на всех устройствах.
для первых строк кода AS выдает мне эту ошибку Ошибка: (32, 40) ошибка: не удается найти переменную символа Ресурсы
@MohamedGamal Можете ли вы показать мне весь класс, в который вы вставили код? Это помогло бы мне лучше понять проблему.
@MohamedGamal Попробуйте getApplicationContext: public static final double SCALE = getApplicationContext().Resources.getSystem().getDisplayMetrics().density; public static final int WIDTH = getApplicationContext().Resources.getSystem().getDisplayMetrics().widthPixels; public static final int HEIGHT = getApplicationContext().Resources.getSystem().getDisplayMetrics().heightPixels;
@MohamedGamal извини, но я не знаю, как тебе помочь.
В любом случае спасибо за попытку :) и, кстати, я исправил это с помощью этого кода
<код> Display display = getWindowManager (). getDefaultDisplay (); Размер точки = новая точка (); display.getSize (размер); конечная ширина int = size.x; конечный int height = size.y; float x = motionEvent.getX (); float y = motionEvent.getY (); // как я записал координаты с экрана 1080 * 1770 if (x> 179 * width / 1080 && x <405 * width / 1080 && y> 37 * height / 1770 && y <145 * height / 1770) {// год подготовки = 0; yearImageView.setImageResource (R.drawable.bprep); } <код>
вам нужно будет учитывать размер и плотность пикселей дисплея ... относительные, а не абсолютные координаты.