Android:在listView自定义framelayout中动态创建大量图像视图

时间:2017-08-18 19:57:52

标签: android listview dynamic

我全身心投入到对我来说可能有点难度的任务中。 我正在设计一个医疗应用程序,显示患者扫描的图像,并叠加描绘器官的几个轮廓。

患者的扫描是一系列PNG图像(切片列表视图行的背景)。 轮廓是矢量,并且相同的扫描切片可以包含几十个轮廓。

为此,使用自定义适配器将扫描切片加载到列表视图中。根据先前完成的器官选择添加轮廓。轮廓是在同一帧布局中通过扫描添加透明背景的imageView。因此,轮廓的图像视图在布局中动态添加。

问题是我可能会从listview中提出太多要求。事实上,我已经陷入了适配器的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 个答案:

答案 0 :(得分:1)

我认为你错误地使用了getView方法

inner join

如果您现在开始这个项目,请考虑使用RecyclerView而不是ListView。

现在可以正常使用,如果没有旧视图,则需要在调用removeAllViews()方法添加ImageView之前清除Framelayout。