Comment faire pour désactiver la vue, cliquez sur l’événement Framelayout

J’ai ici une activité de téléavertisseur qui a une image et deux barres de superposition. il a superposé des barres que j’ai faites en utilisant la mise en page de fichiers xml Android lui-même.

Ici, mon exigence est comme ça

1) appuyez une fois sur l’imageview du pagineur pour la première fois = affichez la barre de superposition du rectangle supérieur et inférieur. 2) appuyez une fois sur l’imageview du pageur de la seconde fois = cachez ces superpositions.

Ces deux sont des fonctions comme le type de vue android android.

Mais ici, lorsque ces barres de disposition en haut et en bas s’affichent à ce moment-là, je souhaite utiliser uniquement des boutons. Cliquez uniquement sur les boutons déclarés dans cette présentation.

Mais je ne réussis pas à atteindre ce but.

Problèmes

1) lorsque la top or bottom bar est là si je peux cliquer sur le bouton next or previous prend de l’événement pour un événement tactile unique imageview, et ma barre devient invisible. 2) Ne veut que déclarer les événements de boutons uniquement 3) Évitez de cliquer sur imageview lorsque je touche à la barre de superposition.

En bref, lorsque ma barre d’image supérieure et inférieure apparaît à ce moment-là, aucun événement touh n’a lieu pour la vue image depuis la barre d’image supérieure et inférieure. Je peux cliquer sur imageview mais ne pas faire un clic lorsque je clique sur le bouton suivant, précédent ou partagé.

Donc, ce sont les problèmes auxquels je suis confronté, S’il vous plaît, aidez-moi.

Code source :

activity_pager_image.xml

        

item_pager_image.xml

     

Code JAVA

 public class ImagePagerActivity extends BaseActivity { private static final Ssortingng STATE_POSITION = "STATE_POSITION"; private DisplayImageOptions options; private Ssortingng[] 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(); Ssortingng[] imageUrls = bundle .getSsortingngArray(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  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(Ssortingng imageUri, View view) { // spinner.setVisibility(View.VISIBLE); } @Override public void onLoadingFailed(Ssortingng imageUri, View view, FailReason failReason) { Ssortingng 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(Ssortingng 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) { } } } 

image:

entrer la description de l'image ici

Merci

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

Une meilleure méthode consiste à définir le cadre supérieur et inférieur sur lequel on peut cliquer, avec:

 android:clickable="true" 

Cela permettra de s’assurer que la vue / image elle-même piégera tous les événements de clics et ne la transmettra pas par la vue. Notez que cette méthode fonctionne pour tous les layout / view / contrôles, mais de nombreux contrôles (tels que les boutons) ont déjà cette fonction activée par défaut.

android:clickable="true" pour les barres supérieure et inférieure.

ou donnez à chaque FrameLayout un onClickListener .

@ gordon1hd1 answer is correct mais pour ceux qui sont encore confus, FrameLayout ma mise en page qui contient un FrameLayout tant que parent et un LinearLayout et deux ImageViews tant qu’enfants.

      

Auparavant, le Linearlayout interceptait également les événements tactiles lorsque l’une des Linearlayout était Linearlayout . L’ajout d’ android:clickable="true" aux deux ImageViews résolu le problème.

Si vous êtes également confronté à ce type de problème, ajoutez android:clickable="true" à la vue que vous souhaitez capturer l’événement de clic.

Simplement, définissez Android: clickable = “true” en XML sur votre vue de premier plan.

       

et

 public void click(View v) { Toast.makeText(this, "((RelativeLayout)v).toSsortingng()", Toast.LENGTH_SHORT).show(); } public void buttonclick(View v) { Toast.makeText(this, "Button", Toast.LENGTH_SHORT).show(); } 

Ajouter android:clickable="true" à rl_bottom_overlay et rl_top_overlay . Si vous ne définissez pas les événements de clic sur ces mises en page (ni via XML ni par programmation), aucun événement ne sera déclenché sur les vues en arrière-plan.