프로그래밍

안드로이드 스튜디오 CustomListView

안드로이드 스튜디오
반응형

여기에 사용할 이미지 파일을 불러옵니다

res/layout에서 list.xml을 생성 합니다

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:background="#eeeeee">
<ImageView
    android:id="@+id/image"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_gravity="center"
    android:src="@mipmap/ic_launcher"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="17dp"
            android:textStyle="bold" />
        <TextView
            android:id="@+id/rating"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="15dp" />
        <RatingBar
            android:id="@+id/star_rate"
            android:layout_width="wrap_content"
            android:layout_height="45dp"
            android:numStars="5"
            android:stepSize="0.5"
            />
        <TextView
            android:id="@+id/genre"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="3dp"
            android:textColor="#666666"
            android:textSize="13dp" />

       <TextView
            android:id="@+id/movie_releaseYear"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="#888888"
            android:gravity="right"
            android:textSize="12dp" />
    </LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".MainActivity">

    <ListView
        android:id="@+id/movie"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:listitem="@layout/list"/>
</LinearLayout>
package com.example.customlistview;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Random;

public class MainActivity extends AppCompatActivity {
    ListView movie;
    String[] titles = {
            "The Wizard of Oz (1939)",
            "Citizen Kane (1941)",
            "All About Eve (1950)",
            "The Third Man (1949)",
            "A Hard Day's Night (1964)",
            "Modern Times (1936)",
            "Metropolis (1927)",
            "Metropolis (1927)",
            "Metropolis (1927)",
            "Metropolis (1927)"};
    Integer[] images = {
            R.drawable.movie1,
            R.drawable.movie2,
            R.drawable.movie3,
            R.drawable.movie4,
            R.drawable.movie5,
            R.drawable.movie6,
            R.drawable.movie7,
            R.drawable.movie7,
            R.drawable.movie7,
            R.drawable.movie7};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        CustomList adapter = new CustomList(MainActivity.this);
        movie = (ListView) findViewById(R.id.movie);
        movie.setAdapter(adapter);
        movie.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getApplicationContext(), titles[+position], Toast.LENGTH_SHORT).show();
            }
        });
    }

    public class CustomList extends ArrayAdapter<String> {
        private final Activity context;

        public CustomList(@NonNull Activity context) {
            super(context, R.layout.list, titles);
            this.context = context;
        }
        Random r = new Random();

        @NonNull
        @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            LayoutInflater inflater = context.getLayoutInflater();
            View movieView = inflater.inflate(R.layout.list, null, true);
            ImageView imageView = (ImageView) movieView.findViewById(R.id.image);
            TextView title = (TextView) movieView.findViewById(R.id.title);
            TextView rating = (TextView) movieView.findViewById(R.id.rating);
            RatingBar star = (RatingBar) movieView.findViewById(R.id.star_rate);
            TextView genre = (TextView) movieView.findViewById(R.id.genre);
            TextView year = (TextView) movieView.findViewById(R.id.movie_releaseYear);

            title.setText(titles[position]);
            imageView.setImageResource(images[position]);
            float rate = r.nextFloat()+r.nextInt(10);
            rating.setText(String.format("%.2f",rate));
            star.setRating(rate/2);
            genre.setText("DRAMA");
            year.setText(1930+position+"");
            return movieView;
        }
    }

}

반응형