Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo deshabilitar detrás de ver haga clic en evento Framelayout

Aquí tengo una actividad del paginador de la visión que tiene una visión de la imagen y 2 barras de la superposición. Allí las barras de la superposición que hice usar el formato androide del archivo del xml sí mismo.

Aquí mi requisito es así

1) un solo toque en el viewview del paginador first time = muestra la barra de superposición del rectángulo superior e inferior. 2) un solo toque en view viewer paginador de la segunda vez = ocultar estas superposiciones.

Ambos son funciones como el tipo android vista gallary.

Pero aquí, cuando estas barras de diseño de arriba y abajo muestra en ese momento quiero usar sólo botones haga clic en sólo qué botones se declaran dentro de este diseño.

Pero no estoy consiguiendo éxito para lograr esto.

Problemas

1) cuando la top or bottom bar está allí si puedo chascar encendido el botón next or previous que toma su acontecimiento para detrás el solo acontecimiento del tacto del tacto de la imagen, y mi barra está consiguiendo invisible. 2) Sólo quiere declarar eventos botón sólo 3) Evite la visualización de la imagen obteniendo clic cuando toco la barra de superposición.

En resumen, cuando mi barra de imágenes superior e inferior aparece en ese momento, no se produce ningún evento para la visualización de imágenes desde la barra de imágenes superior e inferior. Puedo hacer clic en la vista de la imagen pero no hacer clickable cuando hago clic en el botón siguiente o anterior o el botón de compartir.

Así que estos son los problemas que estoy enfrentando, por favor, ayúdame.

Código fuente :

Activity_pager_image.xml

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <RelativeLayout android:id="@+id/rl_top_overlay" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/slideshow_bar" android:visibility="gone" > <TextView android:id="@+id/tv_top_overlay" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:textIsSelectable="false" /> </RelativeLayout> <RelativeLayout android:id="@+id/rl_bottom_overlay" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="@drawable/slideshow_bar" android:visibility="visible" > <Button android:id="@+id/btn_left_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="35dp" android:background="@drawable/ic_left_arrow" /> <Button android:id="@+id/btn_below_share" style="@style/normalText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="35dp" android:background="@drawable/ic_share" android:visibility="visible" /> <Button android:id="@+id/btn_right_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_marginLeft="50dp" android:layout_toRightOf="@id/btn_left_arrow" android:background="@drawable/ic_right_arrow" /> </RelativeLayout> </FrameLayout> 

Item_pager_image.xml

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <demo.android.library.imagezoom.ImageViewTouch android:id="@+id/image" android:layout_width="fill_parent" android:layout_height="fill_parent" android:adjustViewBounds="true" android:contentDescription="@string/descr_image" android:scaleType="fitXY" /> </FrameLayout> 

Código java

 public class ImagePagerActivity extends BaseActivity { private static final String STATE_POSITION = "STATE_POSITION"; private DisplayImageOptions options; private String[] imageUrls; private ViewPager pager; private static int sCounter = 0; private RelativeLayout mRlTopOverlayBar = null; private RelativeLayout mRlBottomOverlayBar = null; private TextView mPageNumberText = null; private Button mLeftArrow = null; private Button mRightArrow = null; int mPageCounter = 0; int mTotalImages = 0; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_pager); mRlTopOverlayBar = (RelativeLayout) findViewById(R.id.rl_top_overlay); mRlBottomOverlayBar = (RelativeLayout) findViewById(R.id.rl_bottom_overlay); mPageNumberText = (TextView) findViewById(R.id.tv_top_overlay); mLeftArrow = (Button) findViewById(R.id.btn_left_arrow); mRightArrow = (Button) findViewById(R.id.btn_right_arrow); Bundle bundle = getIntent().getExtras(); String[] imageUrls = bundle .getStringArray(Constants.GALLARY_IMAGES_IMAGE_BUNDLE_KEY); mTotalImages = imageUrls.length; mPageCounter = bundle.getInt( Constants.GALLARY_IMAGE_POSITION_BUNDLE_KEY, 0); Log.d("TAG", "Pre Poistion " + mPageCounter); if (savedInstanceState != null) { mPageCounter = savedInstanceState.getInt(STATE_POSITION); } options = new DisplayImageOptions.Builder() .showImageForEmptyUri(R.drawable.photo_default) .showImageOnFail(R.drawable.ic_error).resetViewBeforeLoading() .cacheOnDisc().imageScaleType(ImageScaleType.EXACTLY) .bitmapConfig(Bitmap.Config.RGB_565) .displayer(new FadeInBitmapDisplayer(300)).build(); pager = (ViewPager) findViewById(R.id.pager); pager.setAdapter(new ImagePagerAdapter(imageUrls)); pager.setCurrentItem(mPageCounter); mLeftArrow.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // int setCounter = mPageCounter - 1; // if (setCounter >= 0) { // } pager.setCurrentItem(pager.getCurrentItem() - 1); } }); mRightArrow.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { pager.setCurrentItem(pager.getCurrentItem() + 1); /* * int setCounter = mPageCounter + 1; if (setCounter < * mTotalImages) { pager.setCurrentItem(mPageCounter + 1); } */ } }); } @Override public void onSaveInstanceState(Bundle outState) { outState.putInt(STATE_POSITION, pager.getCurrentItem()); } private class ImagePagerAdapter extends PagerAdapter { private String[] images; private LayoutInflater inflater; ImagePagerAdapter(String[] images) { this.images = images; inflater = getLayoutInflater(); } @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager) container).removeView((View) object); } @Override public void finishUpdate(View container) { } @Override public int getCount() { return images.length; } @Override public Object instantiateItem(ViewGroup view, int position) { View imageLayout = inflater.inflate(R.layout.item_pager_image, view, false); Log.d("TAG", "Poistion " + position); final ImageViewTouch imageView = (ImageViewTouch) imageLayout .findViewById(R.id.image); final DeactivableViewPager viewPager = new DeactivableViewPager( ImagePagerActivity.this); imageView.setOnScaleListener(new OnPageScaleListener() { @Override public void onScaleBegin() { viewPager.deactivate(); } @Override public void onScaleEnd(float scale) { if (scale > 1.0) { viewPager.deactivate(); } else { viewPager.activate(); } } }); imageView .setSingleTapListener(new OnImageViewTouchSingleTapListener() { @Override public void onSingleTapConfirmed() { Log.d("TAG", "setSingleTapListener"); sCounter++; if (sCounter % 2 == 0) { mRlTopOverlayBar.setVisibility(View.GONE); mRlBottomOverlayBar.setVisibility(View.GONE); } else { mRlTopOverlayBar.setVisibility(View.VISIBLE); mRlBottomOverlayBar.setVisibility(View.VISIBLE); mRlBottomOverlayBar.setClickable(false); mRlTopOverlayBar.setClickable(false); } } }); imageLoader.displayImage(images[position], imageView, options, new SimpleImageLoadingListener() { @Override public void onLoadingStarted(String imageUri, View view) { // spinner.setVisibility(View.VISIBLE); } @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { String message = null; switch (failReason.getType()) { case IO_ERROR: message = "Input/Output error"; break; case DECODING_ERROR: message = "Image can't be decoded"; break; case NETWORK_DENIED: message = "Downloads are denied"; break; case OUT_OF_MEMORY: message = "Out Of Memory error"; break; case UNKNOWN: message = "Unknown error"; break; } Toast.makeText(ImagePagerActivity.this, message, Toast.LENGTH_SHORT).show(); // spinner.setVisibility(View.GONE); } @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { // spinner.setVisibility(View.GONE); } }); ((ViewPager) view).addView(imageLayout, 0); return imageLayout; } @Override public boolean isViewFromObject(View view, Object object) { return view.equals(object); } @Override public void restoreState(Parcelable state, ClassLoader loader) { } @Override public Parcelable saveState() { return null; } @Override public void startUpdate(View container) { } } } 

! [Escriba aquí la descripción de la imagen] [1] image: Introduzca aquí la descripción de la imagen

Gracias

  • Clase emitida excepción en FrameLayout cuando estoy tratando de cambiar el orden de las vistas en el diseño xml?
  • ¿Por qué se utiliza FrameLayout para fragmentos?
  • Cómo establecer el atributo de primer plano en otra vista no FrameLayout
  • ClassCastException android.widget.FrameLayout $ LayoutParams a android.support.v4.widget.DrawerLayout $ LayoutParams
  • Agregar una vista de texto a un FrameLayout en una posición determinada
  • Cambiar el contenido de framelayout en el botón de clic
  • Rotar diseño de trama que contiene botones dinámicos
  • FrameLayout a RelativeLayout ClassCastException incluso si no hay FrameLayout usado
  • 5 Solutions collect form web for “Cómo deshabilitar detrás de ver haga clic en evento Framelayout”

      imageView.setSingleTapListener(new OnImageViewTouchSingleTapListener() { @Override public void onSingleTapConfirmed() { Log.d("TAG", "setSingleTapListener"); sCounter++; if (sCounter % 2 == 0) { mRlTopOverlayBar.setVisibility(View.GONE); mRlBottomOverlayBar.setVisibility(View.GONE); pager.requestFocus(); } else { mRlTopOverlayBar.setVisibility(View.VISIBLE); mRlBottomOverlayBar.setVisibility(View.VISIBLE); mRlTopOverlayBar.requestFocus(); mRlBottomOverlayBar.requestFocus(); mRlBottomOverlayBar.setClickable(true); mRlTopOverlayBar.setClickable(true); } } }); 

    Una mejor manera es establecer el marco superior e inferior para que se pueda hacer clic, con:

     android:clickable="true" 

    Al hacerlo, se asegurará de que la vista / marco en sí atrape todos los eventos de clic, y no lo pasará a través de la vista detrás de él. Tenga en cuenta que este método funciona para todos los diseños / vista / controles, pero muchos controles (como botones) ya tienen esta función activada de forma predeterminada.

    android:clickable="true" para la barra superior e inferior.

    O dar a cada FrameLayout un onClickListener .

    @ Gordon1hd1 respuesta es correcta, pero para aquellos que todavía están confundidos, estoy añadiendo mi diseño que contiene un FrameLayout como padre y un LinearLayout y dos ImageViews como childs.

     <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/scroll_parent" android:orientation="horizontal" /> <ImageView android:id="@+id/ivArrowLeft" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="4dp" android:src="@drawable/actionbar_back" android:layout_gravity="left|center_vertical" android:background="#3f808080" android:clickable="true" /> <ImageView android:id="@+id/ivArrowRight" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="4dp" android:src="@drawable/actionbar_back" android:layout_gravity="right|center_vertical" android:background="#3f808080" android:rotation="180" android:clickable="true" /> </FrameLayout> 

    Anteriormente, el Linearlayout también estaba interceptando eventos táctiles cuando se presionaba cualquiera de ImageViews . La adición de android:clickable="true" a ambos ImageViews resolvió el problema.

    Si también se enfrenta a este tipo de problema, agregue android:clickable="true" a la vista que desea interceptar el evento clic.

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/llSettings" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="right" android:background="#ff106279" android:minHeight="25px" android:minWidth="25px" android:onClick="click" android:orientation="vertical" android:visibility="visible"> <LinearLayout android:id="@+id/llSettings1" android:layout_width="200dp" android:layout_height="match_parent" android:layout_gravity="right" android:background="#ff000f" android:clickable="true" android:minHeight="25px" android:minWidth="25px" android:orientation="vertical" android:visibility="visible"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:onClick="buttonclick" android:text="New Button" /> </LinearLayout> </RelativeLayout> 

    y

     public void click(View v) { Toast.makeText(this, "((RelativeLayout)v).toString()", Toast.LENGTH_SHORT).show(); } public void buttonclick(View v) { Toast.makeText(this, "Button", Toast.LENGTH_SHORT).show(); } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.