도랑 Runnable
에 대한
GridItemAdaptem
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
final Holder holder;
if(convertView!=null){
holder = (Holder) convertView.getTag();
} else {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
convertView = inflater.inflate(R.layout._grid_guide_item, parent, false);
holder = new Holder(convertView);
convertView.setTag(holder);
}
final Guide guide = this.guides.get(position);
holder.pic.post(new Runnable() {
@Override
public void run() {
try {
int height = Integer.parseInt(guide.getCover().getHeight()) * holder.pic.getWidth()/Integer.parseInt(guide.getCover().getWidth());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(holder.pic.getWidth(), height);
holder.pic.setScaleType(ImageView.ScaleType.FIT_XY);
holder.pic.setLayoutParams(params);
ImageAware imageAware = new ImageViewAware(holder.pic, true);
imageLoader.displayImage(
FavoAPI.getImageURL(guide.getCoverId()),
imageAware
);
} catch (NotCoverException ignored) {}
}
});
holder.name.setText(guide.getName());
holder.user.setText(Finals.AUTHOR + guide.getOwner().getFull_name());
return convertView;
}
static class Holder {
@InjectView(R.id._grid_item_user)
TextView user;
@InjectView(R.id._grid_item_name)
TextView name;
@InjectView(R.id._grid_item_pic)
RoundedCornerImageView pic;
public Holder(View view){
ButterKnife.inject(this, view);
}
}
grid_item.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/GuidePreviewGuideCardItem"
>
<nl.favoThings.favoroute.Views.Widgets.RoundedCornerImageView
android:id="@+id/_grid_item_pic"
style="@style/gridItem_image"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/formDefault_tinnyMargin"
>
<TextView
android:id="@+id/_grid_item_name"
style="@style/gridItem_bigText"
/>
<TextView
android:id="@+id/_grid_item_user"
style="@style/gridItem_smallText"
android:layout_width="wrap_content"
/>
</LinearLayout>
</LinearLayout>
스타일 : 여기
몇 가지 코드입니다. 코드가
getView()
호출에서 바로 실행되도록하십시오.
코드가 실행되면 UI 스레드에서 해당 Runnable
을 실행 중입니다. 의미는 당신이 getView()
메서드에서 그것을 사용하는 이점을 얻지 않는다 ... 또한 UI 스레드에서 실행됩니다. Runnable
이 실행되기 전에 에서 반환 된 View
이 화면에 렌더링되기 때문에 크기 조정을 볼 수 있습니다. 표시되면 View
이 업데이트되고 시각적 변경 사항이 표시됩니다. Runnable
을 제거하면 View
이 화면에 표시되기 전에 올바른 크기가됩니다.
스레드는로드되는 동안 최종 이미지의 높이로 기본 이미지를 표시 할 수 있습니다. 스레드를 제거했으며 문제가 여전히 있습니다. 증서에서, 그것은 실을 구현하기 이전이었습니다. – Viperey
흠 ... 최종 이미지 크기가 이전에 계산 한 것과 일치하는지 확인 하시겠습니까? 최종 이미지가로드되기 전과 후에 View 크기를 출력합니다. 크기가 다른 것을 볼 수있을 것입니다. 크기의 시각적 변화를 설명합니다. –
음, 전체 코드를 구현하는 동안 몇 가지 테스트를했는데, 그 이유는 나를 미치게 만들었 기 때문입니다 (일반적으로 전체) 어쨌든, 시도해 보겠습니다. 시간과 답변을 주셔서 대단히 감사합니다.) – Viperey