在imageview上显示隐藏布局

时间:2018-06-25 11:40:52

标签: android android-viewpager

enter image description here我有一个viewpager,并在其中显示图像。它支持捏缩放和双击缩放。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/framelayout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/linearLayoutViewpager">


    <com.bogdwellers.pinchtozoom.view.ImageViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/black" />


</LinearLayout>

<RelativeLayout
    android:id="@+id/relativelayoutforbuttons"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <Button
        android:id="@+id/save_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="Save" />



   </RelativeLayout>
// Sudo layout, working as button
  <RelativeLayout
android:id="@+id/relativelayoutforvisibility"
android:layout_width="match_parent"
android:layout_height="match_parent">

    

我希望当用户打开viewpager时,它显示完整图像,如果用户单击图像,则应该从另一个(RelativeLayout)布局中出现一个按钮。 我创建了一个额外的布局,并在其上设置了OnClickListener。

  viewPager = (ImageViewPager) v.findViewById(R.id.viewpager);
    final RelativeLayout relativeLayout = (RelativeLayout) 
  v.findViewById(R.id.relativelayoutforbuttons);
    relativeLayout.setVisibility(View.GONE);
    RelativeLayout relativelayoutforvisibility =  (RelativeLayout) 
v.findViewById(R.id.relativelayoutforvisibility);
  relativelayoutforvisibility.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(relativeLayout.getVisibility() == View.VISIBLE)
            {
                relativeLayout.setVisibility(View.GONE);
            }
            // Show layouts if they're not VISIBLE
            else
            {
                relativeLayout.setVisibility(View.VISIBLE);
            }
        }
    });
   myViewPagerAdapter = new MyViewPagerAdapter();
    viewPager.setAdapter(myViewPagerAdapter);
    viewPager.addOnPageChangeListener(viewPagerPageChangeListener);

    setCurrentItem(selectedPosition);

现在,我的问题是这段代码可以正常工作并显示/隐藏按钮的containig布局。但这也会影响viewpager。我无法向左或向右滑动,也无法缩放图像。 我希望whatsapp像全图预览一样在触摸时显示前进按钮。

2 个答案:

答案 0 :(得分:1)

  

轻松解决:将RelativeLayout的高度设置为wrap_content

使RelativeLayout可见后,触摸手势不起作用的原因是因为您使用的是FrameLayout,并且“ RelativeLayout”现在位于{{1 }},它将ImageViewinvalidate,换句话说,它将“ Touch gestures/events”触摸手势,并且不允许您的consume使用它。

修正? 使用create-react-app并放置各个视图(位于ViewPager内部)和图像视图。

这是一个随机示例,在您触摸RelativeLayout时,您将隐藏两个按钮。我不会发布显示ImageView的Java代码。

onClickListeners

然后在您的onClickListener内

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_toRightOf="parent"/> <Button android:id="@+id/shareButton" android:text="Share Button" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toLeftOf="parent" tools:ignore="HardcodedText"/> <Button android:id="@+id/sendButton" android:text="Send Button Button" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_toRightOf="parent" tools:ignore="HardcodedText"/> <android.support.constraint.Group android:id="@+id/group" android:layout_width="wrap_content" android:layout_height="wrap_content" app:constraint_referenced_ids="sendButton,shareButton"/> </android.support.constraint.ConstraintLayout> 等。

更新(用户要求)

yourGroup.setVisiblility(View.GONE);Groups

的一部分
ConstraintLayout

在您的Java代码内部

 <android.support.constraint.Group
              android:id="@+id/group"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:visibility="visible"
              app:constraint_referenced_ids="button4,button9" />

然后为了初始化它们

import android.support.constraint.Group; 

然后设置可见性

Group group = findViewById(R.id.yourGroupId);

答案 1 :(得分:0)

这是因为您的relativelayoutforvisibility占据了所有位置(宽度和高度= match_parent),并且它位于ViewPager的前面,因此此布局具有所有touchs事件,而不会将它们分派给ViewPager(即布局后面)。 您可以将android:clickable="false"android:focusable="false"添加到relativelayoutforvisibility