내가 원하는 내용외부 저장소에서 이미지를 원활하게로드하려면 어떻게해야합니까?
나 자신을 위해 자신의 갤러리 응용 프로그램을 greate하고 싶습니다. 전화의 모든 이미지를 GridLayoutManager에 의해 RecyclerView에로드하려고합니다.
작업
내가 경로와 외부 저장 장치에서 모든 이미지를 가지고 무엇을하는지. 앱이 처음 시작될 때 이미지가 표시됩니다. 내 RecyclerView에서 아래로 스크롤하면
immages 아래 스크린 샷처럼 왜곡됩니다 작동하지 않습니다 무엇
.
또한 로그 캣하여이 오류를 가지고 : 나는 이미지를로드하는 방법
Process: com.spicysoftware.gallery, PID: 12209
java.lang.RuntimeException: Canvas: trying to draw too large(115650308bytes) bitmap.
at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java)
at android.graphics.Canvas.drawBitmap(Canvas.java)
at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java)
at android.widget.ImageView.onDraw(ImageView.java)
at android.view.View.draw(View.java)
at android.view.View.updateDisplayListIfDirty(View.java)
at android.view.View.draw(View.java)
at android.view.ViewGroup.drawChild(ViewGroup.java)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java)
at android.view.View.updateDisplayListIfDirty(View.java)
at android.view.View.draw(View.java)
at android.view.ViewGroup.drawChild(ViewGroup.java)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java)
at android.view.View.draw(View.java)
at android.view.View.updateDisplayListIfDirty(View.java)
at android.view.View.draw(View.java)
at android.view.ViewGroup.drawChild(ViewGroup.java)
at android.support.v7.widget.RecyclerView.drawChild(RecyclerView.java:4477)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java)
at android.view.View.draw(View.java)
at android.support.v7.widget.RecyclerView.draw(RecyclerView.java:3869)
at android.view.View.updateDisplayListIfDirty(View.java)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java)
at android.view.View.updateDisplayListIfDirty(View.java)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java)
at android.view.View.updateDisplayListIfDirty(View.java)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java)
at android.view.View.updateDisplayListIfDirty(View.java)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java)
at android.view.View.updateDisplayListIfDirty(View.java)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java)
at android.view.View.updateDisplayListIfDirty(View.java)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java)
at android.view.View.updateDisplayListIfDirty(View.java)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java)
at android.view.View.updateDisplayListIfDirty(View.java)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java)
at android.view.ViewRootImpl.draw(ViewRootImpl.java)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java)
at android.view.Choreographer.doCallbacks(Choreographer.java)
at android.view.Choreographer.doFrame(Choreographer.java)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java)
at android.os.Handler.handleCallback(Handler.java)
at android.os.Handler.dispatchMessage(Handler.java)
at android.os.Looper.loop(Looper.java)
at android.app.ActivityThread.main(ActivityThread.java)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
이이
공공 무효 loadAllImages() {
String[] mProjection = {MediaStore.Images.Media.DATE_TAKEN,MediaStore.Images.Media.DATA};
Cursor cursorImagesExternal = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,mProjection,null,null,MediaStore.Images.Media.DATE_ADDED);
List<ItemObject> allItems = new ArrayList<ItemObject>();
int countImages = 0;
while(cursorImagesExternal.moveToNext()) {
long date = cursorImagesExternal.getLong(0);
String fileLoc = cursorImagesExternal.getString(1);
allItems.add(new ItemObject(fileLoc));
countImages ++;
}
Log.v("Image Count: ", ""+countImages);
List<ItemObject> rowListItem = allItems;
lLayout = new GridLayoutManager(MainActivity.this, 4);
RecyclerView rView = (RecyclerView)findViewById(R.id.recycler_view);
rView.setHasFixedSize(true);
rView.setLayoutManager(lLayout);
RecyclerViewAdapter rcAdapter = new RecyclerViewAdapter(MainActivity.this, rowListItem);
rView.setAdapter(rcAdapter);
}
이 어댑터
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> {
private List<ItemObject> itemList;
private Context context;
public RecyclerViewAdapter(Context context, List<ItemObject> itemList) {
this.itemList = itemList;
this.context = context;
}
@Override
public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_list, null);
RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView);
return rcv;
}
@Override
public void onBindViewHolder(final RecyclerViewHolders holder, int position) {
//holder.countryName.setText(itemList.get(position).getName());
Glide.with(context).asBitmap()
.load(itemList.get(position).getName())
.thumbnail(0.5f)
.into(holder.countryPhoto);
}
@Override
public int getItemCount() {
return this.itemList.size();
}
}
card_view_list.xml
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="4"
card_view:cardUseCompatPadding="true"
android:layout_marginBottom="16dp">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/country_photo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/action_settings"
android:src="@drawable/ic_remove_red_eye_black_24dp"
android:scaleType="centerCrop" />
</RelativeLayout>
</android.support.v7.widget.CardView>
내 질문
원활의 GridView에 이미지를로드 할 수있는 더 나은 방법이 있나요입니까?
그렇지 않으면 내 코드에 어떤 문제가 있습니까?
당신도'card_view_list.xml'를 게시 할 수 있습니까? –
물론. 이미 마쳤어! – MSeiz5
테스트를 위해 ImageView country_photo에서 layout_width 및 layout_height를 92dp로 고정했습니다. 이제는 지연이나 다른 작업없이 작동합니다. – MSeiz5