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 Comentarios

  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

Dejar respuesta

Please enter your comment!
Please enter your name here