Как отключить за просмотр нажмите кнопку Заменить событие
здесь у меня есть один вид активности пейджера, который имеет один imageview и 2 панели наложения. там наложение баров я сделал с помощью самого макета файла Android xml.
вот мое требование таково
1) одно нажатие на ImageView вид пейджера первый раз = показать верхний и Нижний прямоугольник overlaybar. 2) одно нажатие на просмотр изображения пейджера во второй раз = скрыть эти наложения.
Это обе функции, такие как android gallary view type.
но вот когда эти верхние и нижние панели макета отображаются в то время, я хочу использовать только кнопки, нажмите только те кнопки, которые объявляются в этом макете.
но я не получаю успеха, чтобы достичь этой вещи.
проблемы
1) когда top or bottom bar - это здесь, Если я могу нажать на кнопку next or previous кнопка, чем его принимает событие для позади imageview однократного касания события, и мой бар становится невидимым.
2) только хочет объявить кнопки только событие
3) Избегайте imageview получать нажал, когда я коснитесь панели наложения.
короче говоря, когда в это время появляется моя верхняя и нижняя панель изображений, для imageview из верхней и нижней панели изображений не происходит никакого события touh. Я могу нажать на книги, но не кликабельны при нажатии на кнопку Следующий или предыдущий или поделиться.
так что это проблемы, с которыми я сталкиваюсь, пожалуйста, помогите мне .
исходный код :
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>
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) {
        }
    }
}
изображение :
спасибо
7 ответов:
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); } } });
лучший способ-установить верхнюю и нижнюю рамку для кликабельности, с помощью:
android:clickable="true"Это гарантирует, что сам вид/фрейм будет захватывать все события щелчка и не будет передавать его через вид за ним. Примечание этот метод работает для всех элементов управления layout / view/, но многие элементы управления (например, кнопки) уже имеют эту функцию по умолчанию.
android:clickable="true"на верхней и нижней панели.или дайте каждому
FrameLayoutanonClickListener.
@gordon1hd1 ответ правильный, но для тех, кто все еще смущен, я добавляю свой макет, который содержит
FrameLayoutкак родитель иLinearLayoutи дваImageViewsкак Чайлдс.<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>ранее
Linearlayoutтакже перехватывал события касания, когда любой из . Добавлениеandroid:clickable="true"какImageViewsрешен вопрос.если вы также столкнулись с этим типом проблемы, добавьте
android:clickable="true"к представлению, которое вы хотите перехватить событие щелчка.
<?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>и
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(); }