我有一个动态生成的表布局在父scrollview和水平scrollview。
我想在这个表格布局上实现按钮或缩放。怎么做呢?两者中任何一个更容易实现的都可以。
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="10dp" android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView android:layout_below="@+id/tableHeader"
android:layout_width="match_parent" android:layout_height="match_parent"
android:id="@+id/scrollZoomView">
<TableLayout android:stretchColumns="0,1" android:id="@+id/main_table"
android:layout_height="wrap_content" android:layout_width="match_parent" />
</ScrollView>
</HorizontalScrollView>
编辑添加Java代码:
zoomIn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
zoom(2.0f, 2.0f, 0.0f, 0.0f);
}
});
zoomOut.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
zoom(1.0f, 1.0f, 0.0f, 0.0f);
}
});
public void zoom(float scalex, float scaley, float pivotx, float pivoty){
sv.setScaleX(scalex);
sv.setScaleY(scaley);
sv.setPivotX(pivotx);
sv.setPivotY(pivoty);
sv.requestLayout();
}
我得到的问题是,滚动的宽度和高度没有更新自己,以适应扩大的数据。例如,表中有100行。现在,在我放大后,我可以滚动到第80行,扩大文本。当我缩小时,砰!我看到的是正常大小的第100行。
我添加了
sv.requestLayout();
也试过
invalidate();
毫无效果。
这里有什么问题?如何解决?
您是否尝试更改LayoutParams
的值?
TableLayout mainTableLayout = (TableLayout) findViewById(R.id.main_table);
zoomView(view, 1.5); // Zoom in to 150%
zoomView(view, 0.5); // Zoom out to 50%
function zoomView(View view, int zoomX){
ViewGroup.LayoutParams viewParams = view.getLayoutParams();
viewParams.width *= zoomX;
viewParams.height *= zoomX;
view.setLayoutParams(viewParams);
}
注意:这只是缩放你的TableLayout
,但你必须使子View
的流体,使他们根据父布局调整。