如何在触摸事件中显示图像中的十字标记?

在我的项目中有一个图像。当用户触摸图像中的任何位置时,应使用十字标记。此外,我们必须通过单击按钮清除此十字。我设法显示图像。我在
ontouchlistener()
功能中需要做什么才能显示交叉点?请帮忙。     
已邀请:
我会创建一个自定义
ImageView
,类似于:
public class MarkableImageView extends ImageView {

    ArrayList<Marker> mMarkers;

    // ...

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        for(Marker m : mMarkers) {
            // draw the marker
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent e) {
        if (e.getAction() == MotionEvent.ACTION_DOWN) {
            mMarkers.add(new Marker(e.getX(), e.getY()));
            invalidate();
            return true;
        }
        return false;
    }

    public void reset() {
        mMarkers.clear();
        invalidate();
    }

    // this class will be visible only inside MarkableImageView
    private class Marker {
        public int x;
        public int y;
        // you might want to add other properties, for example
        // if you need to have different types of markers

        public Marker(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
}
    
此代码100%正常运行。如果您还有任何疑问,请与我联系。
public boolean onTouchEvent(MotionEvent event, MapView mapView) 
{   
    if (event.getAction() == 1) 
    {                
            GeoPoint p = mapView.getProjection().fromPixels(
                (int) event.getX(),
                (int) event.getY());
                Toast.makeText(getBaseContext(), "lat and longtd is n "+
                    p.getLatitudeE6() / 1E6 + "," + 
                    p.getLongitudeE6() /1E6 , 
                    Toast.LENGTH_LONG).show(); //
               mapView.getOverlays().add(new MarkerOverlay(p));
                mapView.invalidate();
    } 

    return true;
}  
并定义另一个(第二个)重叠类...此事件将在何处获得。
class MarkerOverlay extends Overlay
{
    private GeoPoint p;
    private Projection projection; 

    public MarkerOverlay(GeoPoint p)
    {
        this.p = p;
    }

    @Override
    public boolean draw(Canvas canvas, MapView mapView,boolean shadow, long when)
    {
        super.draw(canvas, mapView, shadow);                   

        //---translate the GeoPoint to screen pixels---
        Point screenPts = new Point();
        mapView.getProjection().toPixels(p, screenPts);

        //---add the marker---
        Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.pir_pictr);            
        canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);

        return true;   
     }



 }
    
我也在寻找解决方案。我需要在用户触摸的图像上做圆形标记。我也将使用此信息远程控制设备。我发现的解决方案我接下来会提供。我面临的问题是当dpi和设备屏幕发生变化时,此标记操作需要校准。我正在努力改进这种方法。但也许对某人有用。 这里是: 1)方法:首先使用Gimp或photoshop(或......)等程序创建图像。在布局中,放置一个imageview。将图像放入具有原始大小的imageview。 (这是弱点#1)。对于onTouchEvent,添加以下代码。代码将创建2个drawable。创建2个图层。第一层是图像(上图),第二层是标记。然后将标记放在用户触摸的位置。 (这是弱点#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;
        }

    });
此代码正常工作,但仅在某个屏幕大小和像素密度下正常工作。 我要改进这个。     
使用2个图像和两个ImageView - 没有交叉标记的人说no_cross.png - image_view1。 - 另一个用十字标记说with_cross.png - image_view2。 将它们放在xml中的相同位置。最初,image_view2(containig with_cross.png)的可见性是不可见的。
android:visibilty="gone"
OnImage touch使得with_cross.png的可见性变为visible,no_cross.png变为不可见。
setVisibility(View.GONE)
forimage_view1
setVisibility(View.VISIBLE)
forimage_view2 按钮触摸确实反向。
setVisibility(View.VISIBLE)
forimage_view1
setVisibility(View.GONE)
forimage_view2     

要回复问题请先登录注册