У меня есть база данных SQLite, которая содержит xy координаты указанных c точек на изображении (Aya_No) среди других данных, я хотел бы получить информацию из базы данных, обновляя эти указанные c точки (Aya_No) на LongPress
Вот часть БД:
Вот пример изображения:
У меня есть удалось получить ширину и высоту экрана с помощью этого кода:
public static int getScreenX (Context context){
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager wm = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(displayMetrics);
int maxWidth = displayMetrics.widthPixels;
return maxWidth;
}
public static int getScreenY (Context context){
DisplayMetrics displayMetrics = new DisplayMetrics();
WindowManager wm = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(displayMetrics);
int maxHight = displayMetrics.heightPixels;
return maxHight;
}
, и мне удалось получить xy OnTouchListener и передать его OnLongClickListener, используя этот код:
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
x = event.getX();
y = event.getY();
return false;
}
});
view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
double Talorance = 25;
double screenX = Utils.getScreenX(context);
double screenY = Utils.getScreenY(context);
// Adjusted x
double xPer = x/Utils.getScreenX(context); // .315
double adjXMin = (x - Talorance) * xPer;
double adjXMax = (x + Talorance) * xPer;
// Adjusted y
double yPer = y/Utils.getScreenY(context); //.33
double adjYMin = (y - Talorance) * yPer;
double adjYMax = (y + Talorance) * yPer;
String ScreenXY = String.format("ScreenXY: (%.2f, %.2f)",screenX, screenY);
String ClickedXY = String.format("ClickedXY: (%.2f, %.2f)",x,y);
String AdjustedMin = String.format("AdjustedMinXY: (%.2f, %.2f)",adjXMin,adjYMin);
String AdjustedMax = String.format("AdjustedMaxXY: (%.2f, %.2f)",adjXMax,adjYMax);
Log.w("ScreenXY", ScreenXY);
Log.w("ClickedXY ", ClickedXY);
Log.w("MinXY", AdjustedMin);
Log.w("MaxXY",AdjustedMax);
int page = lastpage - QuranActivity.mCurrentPage;
return true;
}
});
результаты последний код после longPress of Ayah 1 (обведено красным на 1-м изображении):
W/ScreenXY: ScreenXY: (1440.00, 2712.00)
W/ClickedXY: ClickedXY: (574.98, 1064.89)
W/MinXY: AdjustedMinXY: (219.60, 408.32)
W/MaxXY: AdjustedMaxXY: (239.57, 427.96)
, в то время как xy этой конкретной точки в БД равно 181, 301
после длинной детали выше и с учетом того, что то, что я запрашиваю, на самом деле реализовано во многих приложениях, использующих одно и то же изображение и db.
Как я могу отрегулировать xy (для разных размеров экрана и плотности), полученный OnTouchListener, чтобы соответствовать или быть рядом с т он в БД (с некоторым допуском), чтобы получить соответствующую информацию из БД?
Я пытался использовать% от общей ширины и высоты, чтобы отрегулировать xy, как вы видели в моем коде, но результаты варьировались от размера экрана к другому и не были близко к тем в БД.
ПОЖАЛУЙСТА, ПОМОГИТЕ!