Come visualizzare il segno di croce nelle immagini su un evento di contatto?

Nel mio progetto c'è un'image. Quando l'utente tocca qualsiasi posto nell'image, dovrebbe essere contrassegnato con un segno di croce. Dobbiamo anche cancellare questa croce su un clic del button. Sono riuscito a visualizzare l'image. Cosa devo fare nella function ontouchlistener() per visualizzare il punto trasversale? Per favore aiuto.

  • import com.google.android.gms.common.api.GoogleApiClient; non può essere risolto
  • ListFragment onItemClickListener non funziona
  • Nessun codice difetto trovato di codice (android)
  • Gridview, consente la canvas di fondo per disegnare fuori dalla vista
  • Avviso di Google Play per l'esecuzione non corretta del fatturazione inApp di Google Play
  • Listview Swipe all'interno di viewflipper
  • Link profondi differiti sempre nullo in android e facebook SDK
  • Visualizzazione di menu simile a Chrome
  • Errore Android: MultipartEntity, la richiesta inviata dal client era sintatticamente errata
  • C'è un modo per rilevare se l'applicazione è stata installata con Market o less?
  • Come cancellare l'area path dalla canvas (Android)
  • Come fare qualcosa quando una casella di controllo cambia stato?
  • 4 Solutions collect form web for “Come visualizzare il segno di croce nelle immagini su un evento di contatto?”

    Vorrei creare un ImageView personalizzato, qualcosa di simile:

     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; } } } 

    Questo codice funziona al 100%. Se hai ancora domande, puoi contattarmi.

     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; } 

    e anche definire un'altra class (2a) di sovrapposizione … where questo evento otterrà.

     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; } } 

    Sto cercando anche una soluzione a questo proposito. Devo fare un segno rotondo su un'image where l'utente tocca. Andrò anche a controllare a distanza un dispositivo con questa informazione. Quello che ho trovato come una soluzione che fornirò dopo. Quello che sto affrontando come un problema è che le schermate di dpi e di dispositivo cambiano questa operazione di marcatura ha bisogno di calibrazione. Sto cercando di migliorare il metodo. Ma anche forse è utile per qualcuno.

    Ecco qui:

    1) Metodo: prima crea un'image con un programma come Gimp o photoshop (o …). Nel layout, posiziona un'image. Metti l'image a quella image con la dimensione originale. (questo è il punto debole # 1). Per il onTouchEvent aggiungere il seguente codice. Quale codice farà è creare 2 disegni. Crea 2 livelli. Il primo strato è l'image (sopra) e il secondo livello è il segno. Quindi posizionare il segno where l'utente tocca. (questo è il punto debole # 2).

    2) Codice:

     // On the top public ImageView ptable; Drawable[] layers; 

    Poi

     //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); 

    Poi

     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; } }); 

    Questo codice funziona ma funziona correttamente solo con una determinata dimensione dello schermo e densità di pixel. Io vado a migliorare questo.

    Utilizza 2 immagini con due ImageView – One senza segno di croce dire no_cross.png – image_view1. – Un altro è con segno di croce dire con_cross.png – image_view2.

    Metterli nella stessa posizione in xml. Inizialmente la visibilità di image_view2 (containig with_cross.png) è invisibile.

     android:visibilty="gone" 

    Il touch OnImage rende la visibilità con_cross.png visibile e no_cross.png invisibile.

    setVisibility(View.GONE) per setVisibility setVisibility(View.VISIBLE) per image_view2

    Tasto di touch del tasto fa invertire.

    setVisibility(View.VISIBLE) per image_view1 setVisibility(View.GONE) per image_view2

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.