Android 视图缩小后未显示所有内容
使用Android 视图缩小后未显示所有内容,android,canvas,view,zooming,scale,Android,Canvas,View,Zooming,Scale,使用View.setScaleX()和View.setScaleY()方法缩小我的视图后,结果只显示已经显示的内容,而忽略了放大时屏幕上不适合的其他内容。我如何强制它显示其余的内容 XML:activity_main.XML <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/table" android:layout_width="match_pa
View.setScaleX()
和View.setScaleY()
方法缩小我的视图
后,结果只显示已经显示的内容,而忽略了放大时屏幕上不适合的其他内容。我如何强制它显示其余的内容
XML:activity_main.XML
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/table"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
JAVA:MainActivity.JAVA
package com.example.zoom;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TableLayout table = (TableLayout) findViewById(R.id.table);
int textViewSize = 100;
int tableColCount = 15;
int tableRowCount = 15;
for (int row = 0; row < tableRowCount; row++) {
TableRow tr = new TableRow(this);
for (int col = 0; col < tableColCount; col++) {
TextView textView = new TextView(this);
textView.setText("" + row + "." + col);
textView.setTextSize(20.0f);
tr.addView(textView, textViewSize, textViewSize);
} // for
table.addView(tr);
} // for
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
LinearLayout table = (LinearLayout) findViewById(R.id.table);
switch (item.getItemId()) {
case R.id.action_zoom_in:
table.setScaleX(1.0f);
table.setScaleY(1.0f);
break;
case R.id.action_zoom_out:
table.setScaleX(0.25f);
table.setScaleY(0.25f);
break;
} // switch
return true;
}
}
package com.example.zoom;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.widget.LinearLayout;
导入android.widget.TableLayout;
导入android.widget.TableRow;
导入android.widget.TextView;
公共类MainActivity扩展了活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TableLayout table=(TableLayout)findviewbyd(R.id.table);
int textViewSize=100;
int tableColCount=15;
int tableRowCount=15;
对于(int row=0;row
截图:|
我注意到它与我的非常相似,但没有代码也没有答案。结果是,手动设置
视图的大小(而不是使用包装内容
)起到了作用。这就是它真正需要的:
FrameLayout.LayoutParams tableLP = new FrameLayout.LayoutParams(
textViewSize * tableColCount, textViewSize * tableRowCount);
table.setLayoutParams(tableLP);
我还将轴点设置为0,以使视图保持在左上角
table.setPivotX(0);
table.setPivotY(0);
关于(谁对我最初的问题发表了评论)我研究了动画,发现使用ViewPropertyAnimator
也做得很好。要使用这个类,只需调用View.animate()
设置要缩放的视图
的大小以及该视图
的轴心点后,您可以使用基本缩放方法而不使用动画
// zoom in by 50%
float scale = 0.5f;
view.setScaleX(table.getScaleX() + scale);
view.setScaleY(table.getScaleY() + scale);
或者使用动画缩放方法
// zoom in by 50%
float scale = 0.5f;
table.animate().scaleXBy(scale).scaleYBy(scale).setDuration(0).start();
以下是原始问题中该计划的完整示例:
package com.example.zoom;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.FrameLayout;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TableLayout table = (TableLayout) findViewById(R.id.table);
int textViewSize = 100;
int tableColCount = 15;
int tableRowCount = 15;
for (int row = 0; row < tableRowCount; row++) {
TableRow tr = new TableRow(this);
for (int col = 0; col < tableColCount; col++) {
TextView textView = new TextView(this);
textView.setText(row + "." + col);
textView.setTextSize(20.0f);
tr.addView(textView, textViewSize, textViewSize);
} // for
table.addView(tr);
} // for
// manually set the size to make sure the entire view is drawn and will be seen when scaled down
FrameLayout.LayoutParams tableLP = new FrameLayout.LayoutParams(textViewSize * tableColCount, textViewSize * tableRowCount);
table.setLayoutParams(tableLP);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
TableLayout table = (TableLayout) findViewById(R.id.table);
// set default scale to 0 in case no scale occurs
float scale = 0.0f;
switch (item.getItemId()) {
case R.id.action_zoom_in:
scale = 0.5f;
break;
case R.id.action_zoom_out:
// use negative to decrease the scale
scale = -0.5f;
break;
} // switch
// set pivot to 0 to keep view in the top left corner
table.setPivotX(0);
table.setPivotY(0);
// add new scale with current scale to get View.scaleBy() equivalent
table.setScaleX(table.getScaleX() + scale);
table.setScaleY(table.getScaleY() + scale);
// could use an animation instead
// table.animate().scaleXBy(scale).scaleYBy(scale).setDuration(0).start();
return true;
}
}
package com.example.zoom;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.widget.FrameLayout;
导入android.widget.TableLayout;
导入android.widget.TableRow;
导入android.widget.TextView;
公共类MainActivity扩展了活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TableLayout table=(TableLayout)findviewbyd(R.id.table);
int textViewSize=100;
int tableColCount=15;
int tableRowCount=15;
对于(int row=0;row
canvas?什么画布?我没有看到任何画布…对不起,我是说View.setScaleX()
和View.setScaleY()
,其中视图是表
。我更新了它。setScale[X¦Y]不是只用于动画吗?我是的