如何在Android应用程序中构建像facebook显示的照片布局

时间:2016-03-08 07:00:51

标签: android layout

我想建立一个像facebook一样的照片布局,在它的Android应用程序中使用。我想实现如下布局:

我已尝试使用recyclelerview显示以下照片:

  rv = (RecyclerView) findViewById(R.id.rv);
    final MyAdapter adapter = new MyAdapter();
    rv.setAdapter(adapter);
    GridLayoutManager mLayoutManager = new GridLayoutManager(this, 2);
    rv.setLayoutManager(mLayoutManager);

    mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            if (adapter.getItemCount() == 1) {
                return 2;
            } else if (adapter.getItemCount() == 2) {
                return 1;
            } else if (adapter.getItemCount() == 3) {
                if (position == 0) {
                    return 2;
                } else {
                    return 1;
                }
            } else {

                return 1;

            }


        }
    });

现在我没有图像的宽度和高度,我只有该图像的网址。 因此,如果我上传了2张图片,我想检查图像是否是纵向(高度是宽度更大)还是横向,并且需要相应地显示图像。

我使用下面的代码来获取图像的高度和宽度:

    new AsyncTask<Void, Void, Void>() {
    @Override
    protected Void doInBackground(Void... params) {
       if (Looper.myLooper()==null)
             Looper.prepare();
       try {                                                     listItemHolder.imageBitmap = Glide.with(mContext).
                                                                        load(mainImage).                                                                       asBitmap().                                                                    into(-1,-1).
get();
 } catch (final ExecutionException e) {
Log.e(TAG, e.getMessage());
 } catch (final InterruptedException e) {
 Log.e(TAG, e.getMessage());
}
 return null;
 }
 @Override
protected void onPostExecute(Void dummy) {
  }
 }.execute();

但代码使我的应用程序太慢了。

任何人都可以在这里有任何想法,我怎样才能做到这一点。

2 个答案:

答案 0 :(得分:1)

您必须使用StaggeredGridLayoutManager

StaggeredGridLayoutManager mLayoutManager = new StaggeredGridLayoutManager(this, 2);
    rv.setLayoutManager(mLayoutManager);

表示

答案 1 :(得分:0)

获取图像的宽度和高度:

您的代码正在使用滑动来加载整个图片,这会使速度变慢。

如果您只想获取尺寸,可以使用位图选项。

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.id.myimage, options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
String imageType = options.outMimeType;

只需从流中解码即可。

选中此Loading Large Bitmaps Efficiently