我有一个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像全图预览一样在触摸时显示前进按钮。
答案 0 :(得分:1)
轻松解决:将
RelativeLayout
的高度设置为wrap_content
使RelativeLayout
可见后,触摸手势不起作用的原因是因为您使用的是FrameLayout
,并且“ RelativeLayout
”现在位于{{1 }},它将ImageView
到invalidate
,换句话说,它将“ 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