Java 如何使用更改的图像创建listView

Java 如何使用更改的图像创建listView,java,android,listview,Java,Android,Listview,我想制作一个列表,其中每一行都有一个每秒更改的imageView,例如listItem 1有一个imageView,它在两个Drawable之间更改,listItem 2有一个imageView,它在两个不同于listItem1的Drawable之间更改。我的代码将所有listItems ImageView更改为相同的绘图表。我怎样才能达到我的目标 public class GymWorkoutList extends AppCompatActivity { String[] name = {

我想制作一个列表,其中每一行都有一个每秒更改的imageView,例如listItem 1有一个imageView,它在两个Drawable之间更改,listItem 2有一个imageView,它在两个不同于listItem1的Drawable之间更改。我的代码将所有listItems ImageView更改为相同的绘图表。我怎样才能达到我的目标

public class GymWorkoutList extends AppCompatActivity {

String[] name = {"Push up", "Side Plank"};
String[] sets = {"5", "4"};
String[] reps = {"12", "10"};
int[] img = {};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_gym_workout_list);

    final ListAdapter gymExerListAdapter = new GymWorkoutListAdapter(this, name, reps, sets, img);
    ListView gymList2 = (ListView)findViewById(R.id.ListaExerciciosGym2);
    gymList2.setAdapter(gymExerListAdapter);

}}
适配器

public class GymWorkoutListAdapter extends ArrayAdapter<String> {

public static int[] imgArray = {R.drawable.pushup1,R.drawable.pushup2};
public static int[] imgArray2 = {R.drawable.sideplank1,R.drawable.sideplank2};
int[] img={};
String[] sets={};
String[] reps={};
String[] name={};
Context c;
LayoutInflater inflater;


public GymWorkoutListAdapter(@NonNull Context context, String[] name, String[] sets, String[] reps, int[] img) {
    super(context, R.layout.activity_gym_workout_list_adapter,name);

    this.name=name;
    this.c=context;
    this.sets=sets;
    this.reps=reps;
    this.img=img;
}

public class views
{
    TextView nameText;
    TextView setsText;
    TextView repsText;
    ImageView imgView;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {


    View customView = convertView;
    if(customView == null){
        inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        customView = inflater.inflate(R.layout.activity_gym_workout_list_adapter, parent, false);
        customView.setMinimumHeight(parent.getHeight()/getCount());}

    final views holder = new views();
    holder.nameText = (TextView) customView.findViewById(R.id.exerText);
    holder.setsText = (TextView) customView.findViewById(R.id.numSets);
    holder.repsText = (TextView) customView.findViewById(R.id.numReps);
    holder.imgView = (ImageView) customView.findViewById(imageView);


    holder.nameText.setText(name[position]);
    holder.setsText.setText(sets[position]);
    holder.repsText.setText(reps[position]);

    final Handler handler = new Handler();
    Runnable runnable = new Runnable() {
        int i=0;
        public void run() {
            holder.imgView.setImageResource(imgArray[i]);
            i++;
            if(i>imgArray.length-1)
            {
                i=0;
            }
            handler.postDelayed(this, 650);
        }

    };
    handler.postDelayed(runnable, 1000);

    Runnable runnable2 = new Runnable() {
        int i = 0;

        public void run() {
            holder.imgView.setImageResource(imgArray2[i]);
            i++;
            if (i > imgArray2.length - 1) {
                i = 0;
            }
            handler.postDelayed(this, 650);
        }
    };
    handler.postDelayed(runnable2, 1000);

    return customView;
}}
公共类GymWorkoutListAdapter扩展了ArrayAdapter{
公共静态int[]imgArray={R.drawable.pushup1,R.drawable.pushup2};
公共静态int[]imgArray2={R.drawable.sideplank1,R.drawable.sideplank2};
int[]img={};
字符串[]集合={};
字符串[]reps={};
字符串[]名称={};
上下文c;
充气机;
公共GymWorkoutListAdapter(@NonNull上下文上下文,字符串[]名称,字符串[]集合,字符串[]重复,int[]img){
超级(上下文、右布局、活动、健身房、训练、列表、适配器、名称);
this.name=name;
c=上下文;
这个。集合=集合;
this.reps=reps;
这个。img=img;
}
公众阶级观点
{
文本视图名称文本;
文本视图设置文本;
text视图repsText;
ImageView-imgView;
}
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
视图customView=convertView;
if(customView==null){
充气器=(LayoutInflater)c.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
customView=充气机。充气(R.layout.activity\u gym\u workout\u list\u adapter,parent,false);
customView.setMinimumHeight(parent.getHeight()/getCount());}
最终视图持有者=新视图();
holder.nameText=(TextView)customView.findViewById(R.id.exerText);
holder.setsText=(TextView)customView.findViewById(R.id.numSets);
holder.repsText=(TextView)customView.findViewById(R.id.numReps);
holder.imgView=(ImageView)customView.findViewById(ImageView);
holder.nameText.setText(名称[位置]);
holder.setText.setText(设置[位置]);
holder.repsText.setText(reps[位置]);
最终处理程序=新处理程序();
Runnable Runnable=新的Runnable(){
int i=0;
公开募捐{
holder.imgView.setImageResource(imgaray[i]);
i++;
如果(i>imgaray.length-1)
{
i=0;
}
handler.postDelayed(这个,650);
}
};
handler.postDelayed(可运行,1000);
Runnable runnable2=新的Runnable(){
int i=0;
公开募捐{
holder.imgView.setImageResource(imgArray2[i]);
i++;
如果(i>imgArray2.length-1){
i=0;
}
handler.postDelayed(这个,650);
}
};
handler.postDelayed(runnable21000);
返回自定义视图;
}}
自定义行XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.andre.fitness.Workouts.GymWorkoutListAdapter">

<ImageView
    android:id="@+id/imageView"
    android:layout_width="195dp"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="10dp"
    android:layout_height="97dp"
    app:srcCompat="@drawable/pushup1"
    tools:layout_editor_absoluteX="1dp"
    tools:layout_editor_absoluteY="-2dp" />

<TextView
    android:id="@+id/sets"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Sets:"
    android:textColor="#000000"
    android:layout_marginTop="21dp"
    android:layout_below="@+id/exerText"
    android:layout_alignLeft="@+id/exerText"
    android:layout_alignStart="@+id/exerText" />

<TextView
    android:id="@+id/reps"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Reps:"
    android:textColor="#000000"
    android:layout_below="@+id/sets"
    android:layout_alignLeft="@+id/sets"
    android:layout_alignStart="@+id/sets"
    android:layout_marginTop="16dp" />

<TextView
    android:id="@+id/numSets"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView"
    android:layout_alignBaseline="@+id/reps"
    android:layout_alignBottom="@+id/reps"
    android:layout_alignLeft="@+id/numReps"
    android:layout_alignStart="@+id/numReps" />

<TextView
    android:id="@+id/numReps"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView"
    android:layout_alignBaseline="@+id/sets"
    android:layout_alignBottom="@+id/sets"
    android:layout_toRightOf="@+id/exerText"
    android:layout_toEndOf="@+id/exerText" />

<TextView
    android:id="@+id/exerText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="#000000"
    android:text="TextView"
    android:layout_marginLeft="22dp"
    android:layout_marginStart="22dp"
    android:layout_alignTop="@+id/imageView"
    android:layout_toRightOf="@+id/imageView"
    android:layout_toEndOf="@+id/imageView" />

</RelativeLayout>

在适配器构造函数中将视图定义为数组

 ...
imgView = new ImageView[adapter.size()];
我建议用不同类型的映像重置适配器。 还可以在customView类中创建自定义视图并处理背景的更改。 如果需要两组视图,请创建ImageView的两个customView扩展。 查看本教程以创建自定义视图 提示

在自定义列表视图的列表项布局(行布局)中,您可以保留两个图像,其中一个图像的可见性为
可见
,另一个图像的可见性为
消失
。现在,当您想要更改图像时,可以通过编程方式更改视图的可见性

这就是我要说的

自定义行的布局可以如下所示:

   <RelativeLayout>
      <ImageView
         android:visibility="gone"
         android:id="@+id/img1"
         android:layout_alignParentLeft="true" />

       <ImageView
          android:id="@+id/img2"
          android:layout_alignParentRight="true"/>

</RelativeLayout>
 public View getView(int position, View convertView, ViewGroup parent) {
     img2.setVisibility(VIEW.GONE);
     img1.setVisibility(VIEW.VISABLE);
 }