如何在android中放大/缩小滚动视图?
问题描述:
在我的android应用程序中,我需要创建活动在我的应用程序中缩放able.nut几个活动以scrollview开头,并且此代码无法识别滚动视图。我怎样才能使可缩放活动缩放?这是我的布局之一。如何在android中放大/缩小滚动视图?
也还试图ScaleGestureDetector和 How to make zoomable scrollview?
想要做的放大/缩小滚动视图。感谢名单您的帮助将appriciated提前
谢谢,这是我的布局
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/horizontalScrollView"
android:layout_gravity="center"
android:fillViewport="false">
<LinearLayout
android:id="@+id/wd_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical" >
<!-- Start Circle -->
<TableRow
android:id="@+id/row_circl1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginTop="30dp"
android:background="@mipmap/ic_launcher" >
<RelativeLayout
android:id="@+id/circle_layout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ic_launcher" >
</RelativeLayout>
</TableRow>
<ImageView
android:id="@+id/img_engin_circle1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:background="@mipmap/ic_launcher"
android:contentDescription="TODO"
android:layout_gravity="center_horizontal" />
<TableRow
android:id="@+id/row_name_circle"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginTop="30dp" >
<RelativeLayout
android:id="@+id/circle_name_layout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="-15dp"
android:background="@mipmap/ic_launcher" >
<ImageView
android:id="@+id/img_name_circle1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:background="@mipmap/ic_launcher"
android:contentDescription="TODO" />
<ImageView
android:id="@+id/img_engin_circle2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ic_launcher"
android:contentDescription="TODO"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/circle_name_layout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="-15dp"
android:background="@mipmap/ic_launcher" >
<ImageView
android:id="@+id/img_name_circle2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:background="@mipmap/ic_launcher"
android:contentDescription="TODO" />
</RelativeLayout>
</TableRow>
<RelativeLayout
android:id="@+id/circle_layout1"
android:layout_width="match_parent"
android:layout_height="172dp"
android:background="@mipmap/ic_launcher"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_gravity="right">
<RelativeLayout
android:id="@+id/relativeLayout"
android:layout_width="match_parent"
android:layout_height="172dp"
android:background="@mipmap/ic_launcher"
android:layout_gravity="right"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/circle_layout1"
android:layout_width="match_parent"
android:layout_height="172dp"
android:background="@mipmap/ic_launcher"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_gravity="right">
<RelativeLayout
android:id="@+id/relativeLaysdfout"
android:layout_width="match_parent"
android:layout_height="172dp"
android:background="@mipmap/ic_launcher"
android:layout_gravity="right"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/circle_laysdfout1"
android:layout_width="match_parent"
android:layout_height="172dp"
android:background="@mipmap/ic_launcher"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_gravity="right">
<RelativeLayout
android:id="@+id/dsf"
android:layout_width="match_parent"
android:layout_height="172dp"
android:background="@mipmap/ic_launcher"
android:layout_gravity="right"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
<!-- End Circle -->
</LinearLayout>
</ScrollView>
这是我的活动
放大了工作完美,但我不能从左到右或反之亦然,就像在我们的照片花式图片视图
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
scrollView = (ScrollView) findViewById(R.id.horizontalScrollView);
horizontalScrollView = (HorizontalScrollView) findViewById(R.id.vertical);
gestureDetector = new GestureDetector(this, new GestureListener());
scaleGestureDetector = new ScaleGestureDetector(this, new ScaleGestureDetector.SimpleOnScaleGestureListener() {
@Override
public boolean onScale(ScaleGestureDetector detector) {
float scale = 1 - detector.getScaleFactor();
float prevScale = mScale;
mScale += scale;
if (mScale < 0.1f) // Minimum scale condition:
mScale = 0.1f;
if (mScale > 10f) // Maximum scale condition:
mScale = 10f;
ScaleAnimation scaleAnimation = new ScaleAnimation(1f/prevScale, 1f/mScale, 1f/prevScale, 1f/mScale, detector.getFocusX(), detector.getFocusY());
scaleAnimation.setDuration(0);
scaleAnimation.setFillAfter(true);
scrollView.startAnimation(scaleAnimation);
horizontalScrollView.startAnimation(scaleAnimation);
return true;
}
});
}
override dispatchTouchEvent()
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
super.dispatchTouchEvent(event);
scaleGestureDetector.onTouchEvent(event);
gestureDetector.onTouchEvent(event);
return gestureDetector.onTouchEvent(event);
}
private class GestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
// event when double tap occurs
@Override
public boolean onDoubleTap(MotionEvent e) {
// double tap fired.
return true;
}
}
}
答
在调度触发事件中,使用ActionType并分别为每个需要执行特定操作的类型的每个MotionEventActions和写逻辑。
How to make a Scrollable Layout and Zoomable Layout in an Android App?
这可能会帮助你漂亮多了。
你好,你找到解决方案吗? – isha
没有找到合适的解决方案,如果我会,我会分享@isha –
谢谢@mehul的回复..我需要相同的解决方案 – isha