android horizontalscrollview不能放在一个layout下面吗

 我来答
EvenHHZ
2016-10-25 · 知道合伙人软件行家
EvenHHZ
知道合伙人软件行家
采纳数:13691 获赞数:18845
个人出版图书:《玩转Python网络爬虫》、《玩转Django2.0》

向TA提问 私信TA
展开全部
HorizontalScrollView是一个FrameLayout ,这意味着你只能在它下面放置一个子控件,这个子控件可以包含很多数据内容。有可能这个子控件本身就是一个布局控件,可以包含非常多的其他用来展示数据的控件。这个布局控件一般使用的是一个水平布局的LinearLayout 。TextView也是一个可滚动的视图控件,所以一般不需要HorizontalScrollView
下面介绍一个HorizontalScrollView中包含许多图片,并且可以滚动浏览的示例

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_main);

mLinearLayout = (LinearLayout) findViewById(R.id.mygallery);

File externalDir = Environment. getExternalStorageDirectory();
String photosPath = externalDir.getAbsolutePath() + "/test/";
File photosFile = new File(photosPath);

for (File photoFile : photosFile.listFiles()) {
mLinearLayout.addView(getImageView(photoFile.getAbsolutePath()));
}

}

private View getImageView(String absolutePath) {

Bitmap bitmap = decodeBitmapFromFile(absolutePath, 200, 200);
LinearLayout layout = new LinearLayout(getApplicationContext());
layout.setLayoutParams( new LayoutParams(250, 250));
layout.setGravity(Gravity. CENTER);

ImageView imageView = new ImageView(this);
imageView.setLayoutParams( new LayoutParams(200,200));
imageView.setScaleType(ImageView.ScaleType. CENTER_CROP);
imageView.setImageBitmap(bitmap);
layout.addView(imageView);

return layout;
}

private Bitmap decodeBitmapFromFile(String absolutePath, int reqWidth, int reqHeight) {
Bitmap bm = null;

// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options. inJustDecodeBounds = true ;
BitmapFactory. decodeFile(absolutePath, options);

// Calculate inSampleSize
options. inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

// Decode bitmap with inSampleSize set
options. inJustDecodeBounds = false ;
bm = BitmapFactory. decodeFile(absolutePath, options);

return bm;
}

private int calculateInSampleSize(Options options, int reqWidth,
int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;

if (height > reqHeight || width > reqWidth) {
if (width > height) {
inSampleSize = Math. round((float)height / ( float)reqHeight);
} else {
inSampleSize = Math. round((float)width / ( float)reqWidth);
}
}

return inSampleSize;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式