Я тоже ищу решение этой проблемы.Мне нужно сделать круглую отметку на изображении, где пользователь касается.Я также собираюсь дистанционно управлять устройством с этой информацией.То, что я нашел в качестве решения, я приведу дальше.Проблема заключается в том, что экраны dpi и устройства меняются, эта операция маркировки требует калибровки.Я пытаюсь улучшить метод.Но также, может быть, это кому-нибудь пригодится.
Вот оно:
1) Метод: Сначала создайте изображение с помощью программы, такой как Gimp или photoshop (или ...).В макете разместите изображение.Поместите изображение в это изображение с оригинальным размером.(это слабое место № 1).Для onTouchEvent добавьте следующий код.Что будет делать код, это создать 2 рисованных объекта.Создайте 2 слоя.1-й слой - изображение (выше), а второй слой - метка.Затем поместите отметку там, где пользователь касается.(это слабое место № 2).
2) Код:
// On the top
public ImageView ptable;
Drawable[] layers;
Тогда
//OnCreateView
ptable = (ImageView)rootView.findViewById(R.id.img_ptable);
layers = new Drawable[2];
layers[0] = r.getDrawable(R.drawable.pratik);
layers[1] = r.getDrawable(R.drawable.pratik);
LayerDrawable ldr = new LayerDrawable(layers);
ptable.setImageDrawable(ldr);
Затем
ptable.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
String text = "Click X:"+ String.valueOf(event.getX())+ " Y:" + String.valueOf(event.getY());
//Dokunulan yere bir işaret oluştur.
Bitmap mark = Bitmap.createBitmap(600, 400,Bitmap.Config.ARGB_8888);
Canvas ca = new Canvas(mark);
Paint pa = new Paint();
pa.setStyle(Paint.Style.STROKE);
pa.setAntiAlias(true);
//pa.setStrokeCap(Paint.Cap.ROUND);
pa.setStrokeWidth((float)3);
pa.setARGB(251, 20, 20, 20);
float cx = event.getX() + 10 + (8*event.getX()/100);
float cy = event.getY() + 10 + (6*event.getY()/100);
ca.drawCircle(cx, cy, 13, pa);
BitmapDrawable bmp = new BitmapDrawable(getResources(), mark);
layers[1] = (Drawable)bmp;
LayerDrawable ldr = new LayerDrawable(layers);
ptable.setImageDrawable(ldr);
return true;
}
});
Этокод работает, но работает правильно только с определенным размером экрана и плотностью пикселей.Я собираюсь улучшить это.