私は自分にとっては少し難しいかもしれないタスクに自分自身を投げました。 私は、患者のスキャン画像を表示し、器官を描写するいくつかの等高線を重ね合わせる医療アプリケーションを設計しています。Android:リスト内に多数の画像ビューを動的に作成するビューのカスタムフレームレートを表示
患者のスキャンは、一連のPNG画像(スライスリストビュー行の背景)です。 輪郭はベクトルであり、同じスキャンスライスには数十の輪郭が含まれている場合があります。
このようにするには、スキャンスライスがカスタムアダプタのリストビューに読み込まれます。等高線は、以前に行われた臓器の選択に従って追加される。等高線は、同じフレームレートでスキャンしたときに透明な背景が追加されたimageViewです。したがって、輪郭の画像ビューはレイアウト内で動的に追加されます。
問題は、私がリストビューからあまりにも多くを求めているかもしれないということです。実際、私はアダプタのgetViewメソッドに苦しんでいます。等高線が現れますが、スライスをリフレッシュして繰り返しすることは無作為なようです。
誰かが私にこの状況についてのヒントを投げかけてもらえますか?私はイメージビューのダイナミックな割り振りが賢明だとは思っていません...どうすればいいですか?
ご迷惑をおかけして申し訳ございません。
アダプタ:
package bhouse.radiovolumes;
import android.content.Context;
import android.media.Image;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
/**
* Created by kranck on 8/3/2017.
*/
public class ScannerListAdapter extends ArrayAdapter<SliceItem> {
private Context context;
private LayoutInflater inflater;
private ArrayList<SliceItem> slices;
public ScannerListAdapter(Context context, ArrayList<SliceItem> slices) {
super(context, R.layout.list_view_scan, slices);
this.context = context;
this.slices = slices;
inflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.list_view_scan, parent, false);
convertView.setMinimumHeight(parent.getMeasuredHeight());
holder = new ViewHolder();
holder.scanView = (ImageView) convertView.findViewById(R.id.view_scan);
holder.frameLayout = (FrameLayout) convertView.findViewById(R.id.zoomLayout);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
SliceItem item = getItem(position);
int resIdScan = this.context.getResources().getIdentifier(item.getStorageLocation(), "drawable", context.getPackageName());
Picasso
.with(context)
.load(resIdScan)
.error(R.drawable.borabora)
.into(holder.scanView);
for (int i = 0; i < item.getVectorStorageLocation().size(); i++) {
ImageView imageView = new ImageView(context);
String resourceName = "cylindre__2___" + String.valueOf(position);
int resId = context.getResources().getIdentifier(resourceName, "drawable", context.getPackageName());
imageView.setImageResource(resId);
holder.frameLayout.addView(imageView);
}
return convertView;
}
static class ViewHolder {
FrameLayout frameLayout;
ImageView scanView;
}
}
レイアウト
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<bhouse.radiovolumes.ZoomView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true" >
<FrameLayout
android:id="@+id/zoomLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/view_scan"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
>
</ImageView>
</FrameLayout>
</bhouse.radiovolumes.ZoomView>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<bhouse.radiovolumes.ZoomView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true" >
<FrameLayout
android:id="@+id/zoomLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/view_scan"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
>
</ImageView>
</FrameLayout>
</bhouse.radiovolumes.ZoomView>
</LinearLayout>
ありがとうございます。 1 /私はコードをフォーマットしました。それは読みやすいですか? 2 /あなたは正しい私のパターンは正しくありませんでした。しかし、問題は残っています:興味深いことに、ベクトル画像(円柱2)は不正確なスライスで再利用されているようです。瞬間的に、位置1のベクトルは、位置5のスライスでも見つかります。 新しいimageViewが作成されると、ビューのリサイクルに関係していると思います。私は、しかし、どのように把握することはできません。どんな助けにも感謝! – Kranck
はい!このオプションはレイアウトエディタでも利用できます – smora
私は自分の答えを更新しました。あなたの問題を解決することを願っています。 – smora