puede hacer clic área de la imagen

soy diseñar una interfaz gráfica de usuario control remoto, pero en lugar de hacer botones separados para cada botón del control remoto, quiero obtener una lista completa de imagen remota y configurar ciertas partes de un clic-poder.
hay una manera en lugar de el evento de movimiento para hacer esto?

  • Usted quiere hacer todo en una sola imagen?
  • sí….
  • es su manera de alguna manera dividir una imagen en filas y columnas?
  • ¿te importaría si toda la imagen permanece clickable pero usted seguramente puede obtener información precisa de que la zona ha sido pinchado?
  • si esto no realizar manifestaciones falsas acciones cuando se ejecuta la aplicación, a continuación, no hay problema
  • he pensado en usar gridview diseño pero no podía establecer un fondo de imagen para que
  • me escribe una respuesta para su requisito.
  • Creo que se debe utilizar evento de movimiento para este.

5 Kommentare

  1. 35

    Tengo 2 soluciones para sus necesidades.en tanto,el conjunto de la imagen permanece clickable pero se puede obtener información acerca de clic.

    Solución 1:

    puede enmascarar la imagen y obtener el píxel color de que debajo de la imagen.así que al final puedes llegar a conocer en qué área se ha hecho clic.

    aquí,cada vez que hace clic se produce,se puede comprobar el color de los píxeles de background image y el partido con predefinidos conjunto de colores para saber sobre qué área ha sido pulsado.

    Imagen en primer plano:
    puede hacer clic área de la imagen

    Imagen de fondo:
    puede hacer clic área de la imagen

    Área seleccionable:
    puede hacer clic área de la imagen

    Todavía está confundido?

    Referencia:
    Me gustaría sugerir que usted vaya a través este tutorial.

    Solución 2:

    puede asignar su imagen con coordenadas y, en consecuencia, se puede obtener la información de la zona que ha sido pulsado.

    Ejemplo:
    MappedImage con coordenadas

    si no son conscientes de coordenadas,puede crear su mappedimage de aquí

    coordenadas para Kansas se verá algo como esto,

            <area shape="poly" coords="243,162,318,162,325,172,325,196,244,196" id="@+id/area14" name = "Kansas"/>

    puede hacer clic área de la imagen

    Referencia:
    Por favor, eche un vistazo a Imagen De Android Asignación De.

    Espero que sea de ayuda !!

    • bien, gracias…….voy a probar muy pronto
    • Gracias por esto! Alguna idea de cómo utilizar cualquiera de estos métodos en una aleación de titanio de la aplicación?
    • Lo que si tenemos que hacer zoom en la imagen y obtener de píxeles? ¿Vuelve el mismo color?
  2. 8

    Usted todavía puede utilizar los botones.

    Puede colocar por encima de su imagen en los lugares correctos y hacerlos invisibles.

    En XML

    <Button android:visibility="invisible"/>

    O

    Button mybutton = (Button) v1;
    mybutton.setVisibility(View.INVISIBLE);
    • Tengo un pariente de diseño con algunos botones en él. Si he de poner una imagen de fondo en la relación diseño y los botones invisibles, entonces el onClick no activar. Cuando me puse a visible, lo hacen.
    • No esta dependerá de cómo se están haciendo los botones invisibles? I. e., si se establece el visibility atributo gone (o invisible), a continuación, que no se puede hacer clic, pero lo que si se trató de hacer el fondo del botón 100% transparente – espero que usted todavía consigue un evento click(??)
    • Me gusta esta solución, pero la visibilidad no funciona. Puedo hacer el fondo transparente y funcionó.
  3. 2

    Yo tenía los mismos problemas y resolverlos con la biblioteca «PhotoView», donde se puede escuchar por

    onPhotoTap(View view, float x, float y){} 

    eventos y comprobar si la ficha está dentro de su área de la imagen y, a continuación, realizar ciertas tareas.

    He creado una biblioteca para ayudar a otros desarrolladores implementar dicha funcionalidad mucho más rápido. Es en Github: ClickableAreasImages

    Esta biblioteca le permite definir áreas donde puede hacer clic en una imagen, objetos asociada a ella y escuchar para eventos de toque en esa área.

    El Uso De la biblioteca:

    public class MainActivity extends AppCompatActivity implements OnClickableAreaClickedListener {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //Add image
            ImageView image = (ImageView) findViewById(R.id.imageView);
            image.setImageResource(R.drawable.simpsons);
    
            //Create your image
            ClickableAreasImage clickableAreasImage = new ClickableAreasImage(new PhotoViewAttacher(image), this);
    
            //Initialize your clickable area list
            List<ClickableArea> clickableAreas = new ArrayList<>();
    
            //Define your clickable areas
            //parameter values (pixels): (x coordinate, y coordinate, width, height) and assign an object to it
            clickableAreas.add(new ClickableArea(500, 200, 125, 200, new Character("Homer", "Simpson")));
            clickableAreas.add(new ClickableArea(600, 440, 130, 160, new Character("Bart", "Simpson")));
        }
    
        //Listen for touches on your images:
        @Override
        public void onClickableAreaTouched(Object item) {
            if (item instanceof Character) {
                String text = ((Character) item).getFirstName() + " " + ((Character) item).getLastName();
                Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
            }
        }
    ...
    }
    • Lo que si necesito comprobar por los clics no de forma rectangular áreas, como los círculos? Funciona con su biblioteca? Gracias.
  4. 0

    La mejora de @sealz respuesta, aquí mi respuesta:

    <RelativeLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_centerInParent="true"
            android:layout_alignTop="@+id/mail"
            android:layout_alignBottom="@+id/mail"
            >
            <Button
                android:id="@+id/leftMail"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight=".5"
                android:background="@android:color/transparent"
                />
            <Button
                android:id="@+id/rightMail"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight=".5"
                android:background="@android:color/transparent"    
                />
            </LinearLayout>
        <ImageView 
           android:id="@+id/mail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:src="@drawable/mail1600x600"
            android:layout_centerInParent="true"
            />
    </RelativeLayout>
  5. 0

    Si al hacer clic en rectángulos es suficiente, entonces esto puede lograrse fácilmente mediante la ampliación de ImageView. La siguiente es una sencilla aplicación, sin tener en cuenta la accesibilidad.

    La Vista:

    paquete com.ejemplo.letzterwille.vistas;

    import android.content.Context;
    import android.graphics.Rect;
    import android.util.AttributeSet;
    import android.view.MotionEvent;
    import android.widget.ImageView;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import androidx.annotation.Nullable;
    
    public class ClickableAreaImageView extends ImageView {
    
        Map< Rect, Runnable > areaEffects = new HashMap<>();
    
        public ClickableAreaImageView( Context context ) {
            super( context );
        }
    
        public ClickableAreaImageView( Context context, @Nullable AttributeSet attrs ) {
            super( context, attrs );
        }
    
        public ClickableAreaImageView( Context context, @Nullable AttributeSet attrs, int defStyleAttr ) {
            super( context, attrs, defStyleAttr );
        }
    
        public ClickableAreaImageView( Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes ) {
            super( context, attrs, defStyleAttr, defStyleRes );
        }
    
        public void addAreaEffect( Rect target, Runnable event ) {
            areaEffects.put( target, event );
        }
    
        @Override
        public boolean onTouchEvent( MotionEvent event ) {
            if ( event.getAction() == MotionEvent.ACTION_DOWN ) {
                int x = ( int ) event.getX();
                int y = ( int ) event.getY();
    
                for ( Map.Entry< Rect, Runnable > entry : areaEffects.entrySet() ) {
                    Rect rect = entry.getKey();
                    if ( rect.contains( x, y ) ) entry.getValue().run();
                }
            }
    
            return super.onTouchEvent( event );
        }
    }

    En el XML o Java, lo utilizan como una normal ImageView.

    A continuación, usted tiene que registrar el haga clic en acciones. Yo quería ir a actividades específicas, que se veía así en Kotlin:

    class MenuSelection : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_menu_selection)
            val areaImage = findViewById<ClickableAreaImageView>(R.id.menuSelectionImage)
    
            areaImage.addAreaEffect(Rect(530, 100, 1080, 800), makeRunnable(SettingsActivity::class.java))
            areaImage.addAreaEffect(Rect(30, 80, 430, 700), makeRunnable(StatsActivity::class.java))
        }
    
        private fun makeRunnable(activity: Class<*>): Runnable {
            return Runnable {
                val intent = Intent(this, activity)
                startActivity(intent)
                overridePendingTransition(R.anim.slide_in_from_bottom, R.anim.slide_out_to_top);
            }
        }
    }

    En general, su uso en la definición de los rectángulos, un Ejecutable para ejecutar cuando el rectángulo se hace clic en y, a continuación, agregarlos a la vista a través de ClickableAreaImageView.addAreaEffect

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea