如何使可缩放滚动视图?

在我的android应用程序中,我需要创build活动缩放能力。 我发现这里有用于缩放线性布局的有用代码。 但在我的应用程序中的一些活动开始scrollview和此代码不能识别滚动视图。 我怎样才能使可缩放活动缩放? 这是我的一个布局。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/scrollViewZoom" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" > <LinearLayout android:id="@+id/wd_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" 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="@color/purple_color" > <RelativeLayout android:id="@+id/circle_layout1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/white_color" > <ImageView android:id="@+id/img_engin_circle1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:background="@drawable/circle_engin_bg" android:contentDescription="TODO" /> </RelativeLayout> <RelativeLayout android:id="@+id/circle_layout2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/white_color" > <ImageView android:id="@+id/img_engin_circle2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:background="@drawable/circle_engin_bg" android:contentDescription="TODO" /> </RelativeLayout> </TableRow> <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="@color/white_color" > <ImageView android:id="@+id/img_name_circle1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:background="@drawable/circle_gauge_name" android:contentDescription="TODO" /> </RelativeLayout> <RelativeLayout android:id="@+id/circle_name_layout2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="-15dp" android:background="@color/white_color" > <ImageView android:id="@+id/img_name_circle2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:background="@drawable/circle_gauge_name" android:contentDescription="TODO" /> </RelativeLayout> </TableRow> <!-- End Circle --> </LinearLayout> </ScrollView> 

任何想法会帮助我。 谢谢。

  • 如何更改android评分吧星星?
  • 如何将底部视图添加到带查看呼叫器的协调器布局?
  • 具有相同类的多个片段实例的ViewPager
  • android:targetSdkVersion为16时的动作栏行为
  • 如何设置android的动作条标签的高度
  • Card_view材料devise
  • 如何将数据从活动发送到片段
  • 如何在我的应用程序中将我的个人键盘设置为标准input
  • 好。 网后,终于find了我的答案。 我发现onTouchEvent()为scrollview不起作用,所以我不得不使用dispatchTouchEvent()而不是onTouchEvent() 。 在顶部,你可以看到我的XML代码(在我的问题)这里是我的活动代码,当然有意见。

      // step 1: add some instance private float mScale = 1f; private ScaleGestureDetector mScaleDetector; GestureDetector gestureDetector; //step 2: create instance from GestureDetector(this step sholude be place into onCreate()) gestureDetector = new GestureDetector(this, new GestureListener()); // animation for scalling mScaleDetector = 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 layout =(ScrollView) findViewById(R.id.scrollViewZoom); layout.startAnimation(scaleAnimation); return true; } }); // step 3: override dispatchTouchEvent() @Override public boolean dispatchTouchEvent(MotionEvent event) { super.dispatchTouchEvent(event); mScaleDetector.onTouchEvent(event); gestureDetector.onTouchEvent(event); return gestureDetector.onTouchEvent(event); } //step 4: add private class GestureListener 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; } } 

    非常感谢。