본문 바로가기
DEVELOPMENT

[Android Studio] Chapter 11 연습문제

by 200% 2021. 7. 7.

[연습문제]

5

activitiy_main.xml

더보기
<?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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <GridView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="4"
        android:id="@+id/gridView1"
        android:gravity="center"
        android:numColumns="3">
    </GridView>

    <Button
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:id="@+id/btnResult"
        android:layout_weight="1"
        android:text="투표 종료"/>


</LinearLayout>

result.xml

더보기
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:stretchColumns="0"
    android:layout_marginHorizontal="10dp">

    <TableRow>
        <TextView
            android:layout_span="2"
            android:id="@+id/imgTitle"
            android:layout_gravity="center"
            android:textSize="20dp"
            android:text="제목"/>
    </TableRow>
    <TableRow>
        <ImageView
            android:layout_span="2"
            android:id="@+id/imgview"
            android:src="@drawable/mov10"/>
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/tv1"
            android:layout_gravity="center_vertical"
            android:text="그림1"
            android:textSize="15dp"/>
        <RatingBar
            android:id="@+id/rbar1"
            style="?android:attr/ratingBarStyleIndicator"
            android:layout_gravity="right"></RatingBar>
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/tv2"
            android:layout_gravity="center_vertical"
            android:text="그림2"
            android:textSize="15dp"/>
        <RatingBar
            android:id="@+id/rbar2"
            style="?android:attr/ratingBarStyleIndicator"
            android:layout_gravity="right"></RatingBar>
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/tv3"
            android:layout_gravity="center_vertical"
            android:text="그림3"
            android:textSize="15dp"/>
        <RatingBar
            android:id="@+id/rbar3"
            style="?android:attr/ratingBarStyleIndicator"
            android:layout_gravity="right"></RatingBar>
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/tv4"
            android:layout_gravity="center_vertical"
            android:text="그림4"
            android:textSize="15dp"/>
        <RatingBar
            android:id="@+id/rbar4"
            style="?android:attr/ratingBarStyleIndicator"
            android:layout_gravity="right"></RatingBar>
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/tv5"
            android:layout_gravity="center_vertical"
            android:text="그림5"
            android:textSize="15dp"/>
        <RatingBar
            android:id="@+id/rbar5"
            style="?android:attr/ratingBarStyleIndicator"
            android:layout_gravity="right"></RatingBar>
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/tv6"
            android:layout_gravity="center_vertical"
            android:text="그림6"
            android:textSize="15dp"/>
        <RatingBar
            android:id="@+id/rbar6"
            style="?android:attr/ratingBarStyleIndicator"
            android:layout_gravity="right"></RatingBar>
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/tv7"
            android:layout_gravity="center_vertical"
            android:text="그림7"
            android:textSize="15dp"/>
        <RatingBar
            android:id="@+id/rbar7"
            style="?android:attr/ratingBarStyleIndicator"
            android:layout_gravity="right"></RatingBar>
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/tv8"
            android:layout_gravity="center_vertical"
            android:text="그림8"
            android:textSize="15dp"/>
        <RatingBar
            android:id="@+id/rbar8"
            style="?android:attr/ratingBarStyleIndicator"
            android:layout_gravity="right"></RatingBar>
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/tv9"
            android:layout_gravity="center_vertical"
            android:text="그림9"
            android:textSize="15dp"/>
        <RatingBar
            android:id="@+id/rbar9"
            style="?android:attr/ratingBarStyleIndicator"
            android:layout_gravity="right"></RatingBar>
    </TableRow>
    <TableRow>
        <TextView
            android:id="@+id/tv10"
            android:layout_gravity="center_vertical"
            android:text="그림10"
            android:textSize="15dp"/>
        <RatingBar
            android:id="@+id/rbar10"
            style="?android:attr/ratingBarStyleIndicator"
            android:layout_gravity="right"></RatingBar>
    </TableRow>
    <TableRow>
        <Button
            android:id="@+id/btnReturn"
            android:layout_span="2"
            android:text="돌아가기"/>
    </TableRow>
</TableLayout>

 

MainActivity.java

더보기
package com.cookandroid.a11_5;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    final int voteCount[] = new int[10];

    String[] posterName = {
            "아차모", "찌르성게", "이브이", "해무기", "지라치", "란쿨루스", "누니머기", "팽도리", "피츄", "피카츄"
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("포켓몬 선호도 투표");

        final GridView gv = (GridView) findViewById(R.id.gridView1);
        MyGridAdapter gAdapter = new MyGridAdapter(this);
        gv.setAdapter(gAdapter);

        for(int i=0;i<10;i++){
            voteCount[i]=0;
        }


    }
    public class MyGridAdapter extends BaseAdapter {
        Context context;

        public MyGridAdapter(Context c){
            context = c;
        }

        @Override
        public int getCount() {
            return posterID.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        Integer[] posterID = {
                R.drawable.mov1, R.drawable.mov2, R.drawable.mov3, R.drawable.mov4, R.drawable.mov5, R.drawable.mov6, R.drawable.mov7, R.drawable.mov8, R.drawable.mov9, R.drawable.mov10
        };

        public View getView(int position, View convertView, ViewGroup parent){
            ImageView imageview = new ImageView(context);
            imageview.setLayoutParams(new ViewGroup.LayoutParams(200, 300));
            imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);
            imageview.setPadding(5,5,5,5);

            imageview.setImageResource(posterID[position]);


            final int pos = position;
            imageview.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    voteCount[position]++;
                    Toast.makeText(getApplicationContext(), posterName[position] + ": 총 "+voteCount[position]+ " 표", Toast.LENGTH_SHORT).show();
                }
            });

            Button btnFinish = (Button) findViewById(R.id.btnResult);
            btnFinish.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
                    intent.putExtra("VoteCount", voteCount);
                    intent.putExtra("ImageName", posterName);
                    startActivity(intent);
                }
            });


            return imageview;
        }}
}

ResultActivity.java

더보기
package com.cookandroid.a11_5;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;

import androidx.annotation.Nullable;

public class ResultActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.result);
        setTitle("투표 결과");

        Intent intent = getIntent();
        int[] voteResult = intent.getIntArrayExtra("VoteCount");
        String[] imageName = intent.getStringArrayExtra("ImageName");

        int highest = 0;

        TextView tv[] = new TextView[imageName.length];
        RatingBar rbar[] = new RatingBar[imageName.length];

        Integer tvID[] = {R.id.tv1, R.id.tv2, R.id.tv3, R.id.tv4, R.id.tv5, R.id.tv6, R.id.tv7, R.id.tv8, R.id.tv9, R.id.tv10};
        Integer rbarID[] = {R.id.rbar1, R.id.rbar2, R.id.rbar3, R.id.rbar4, R.id.rbar5, R.id.rbar6, R.id.rbar7, R.id.rbar8, R.id.rbar9, R.id.rbar10};
        Integer imageFileID[] = {R.drawable.mov1, R.drawable.mov2, R.drawable.mov3, R.drawable.mov4, R.drawable.mov5, R.drawable.mov6, R.drawable.mov7, R.drawable.mov8, R.drawable.mov9, R.drawable.mov10};

        for(int i = 0; i<voteResult.length; i++){
            tv[i] = (TextView) findViewById(tvID[i]);
            rbar[i] = (RatingBar) findViewById(rbarID[i]);
        }

        for(int i = 0; i<voteResult.length; i++){
            tv[i].setText(imageName[i]);
            rbar[i].setRating((float) voteResult[i]);
            if(voteResult[i]>voteResult[highest]){
                highest = i;
            }
        }

        TextView imgTitle = (TextView) findViewById(R.id.imgTitle);
        ImageView imgView = (ImageView) findViewById(R.id.imgview);

        imgTitle.setText(imageName[highest]);
        imgView.setImageResource(imageFileID[highest]);

        Button btnReturn = (Button) findViewById(R.id.btnReturn);
        btnReturn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }
}

 

 

6

11-3이랑 9-3 합쳤는데 스피너에서 선택해도 이미지가 안 바뀌는 문제 발생...

부탁한다 미래의 나...! 고쳐줘...!!!

 

activitiy_main.xml

더보기
<?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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/spinner1"/>
    <LinearLayout
        android:id="@+id/iconLayout"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:gravity="center">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="메뉴"
            android:id="@+id/btn"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="9"
        android:gravity="center"
        android:id="@+id/pictureLayout"
        android:orientation="vertical">
    </LinearLayout>


</LinearLayout>

 

MainActivity.java

더보기
package com.cookandroid.a11_6;

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

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Spinner;

public class MainActivity extends AppCompatActivity {
    Button btn;
    MyGraphicView graphicView;
    static float scaleX=1, scaleY=1;
    static float angle=0;
    static float color=1;
    static float satur=1;
    static int currentimg;

    static final String[] pokemon = {
            "아차모", "찌르성게", "이브이", "해무기", "지라치", "란쿨루스", "누니머기", "팽도리", "피츄", "피카츄",
    };
    static final Integer[] posterID = {
            R.drawable.mov1, R.drawable.mov2, R.drawable.mov3, R.drawable.mov4, R.drawable.mov5, R.drawable.mov6, R.drawable.mov7, R.drawable.mov8, R.drawable.mov9, R.drawable.mov10
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("연습문제 11-6");


        Spinner spinner = (Spinner) findViewById(R.id.spinner1);

        ArrayAdapter<String> adapter;
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, pokemon);
        spinner.setAdapter(adapter);

        LinearLayout pictureLayout = (LinearLayout) findViewById(R.id.pictureLayout);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                graphicView.setSelectImageID(posterID[position]);
                graphicView.invalidate();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        graphicView = (MyGraphicView) new MyGraphicView(this);
        pictureLayout.addView(graphicView);

        btn = (Button) findViewById(R.id.btn);
        registerForContextMenu(btn);

    }
    private  static class MyGraphicView extends View {
        private  Context context;
        private Integer selectImageID;

        public MyGraphicView(Context context){
            super(context);
            this.context = context;
        }

        public MyGraphicView(Context context, @Nullable AttributeSet attrs){
            super(context, attrs);
            this.context = context;
        }

        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);

            int cenX = this.getWidth() / 2;
            int cenY = this.getHeight() / 2;
            canvas.scale(scaleX, scaleY, cenX, cenY);
            canvas.rotate(angle, cenX, cenY);

            Paint paint = new Paint();
            float[] array = {color, 0, 0, 0, 0,
                    0, color, 0, 0, 0,
                    0, 0, color, 0, 0,
                    0, 0, 0, 1, 0};
            ColorMatrix cm = new ColorMatrix(array);

            if (satur == 0) cm.setSaturation(satur);

            paint.setColorFilter(new ColorMatrixColorFilter(cm));

            Bitmap picture = BitmapFactory.decodeResource(getResources(), posterID[currentimg]);
            int picX = (this.getWidth() - picture.getWidth()) / 2;
            int picY = (this.getHeight() - picture.getHeight()) / 2;

            canvas.drawBitmap(picture, picX, picY, paint);

            picture.recycle();

        }

        public void setSelectImageID(Integer selectImageID){
            this.selectImageID = selectImageID;
        }
    }


    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(0, 1, 0, "확대");
        menu.add(0, 2, 0, "축소");
        menu.add(0, 3, 0, "회전");
        menu.add(0, 4, 0, "밝게");
        menu.add(0, 5, 0, "어둡게");
        menu.add(0, 6, 0, "그레이영상");
    }

    public boolean onContextItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case 1:
                scaleX = scaleX + 0.2f;
                scaleY = scaleY + 0.2f;
                graphicView.invalidate();
                return true;
            case 2:
                scaleX = scaleX - 0.2f;
                scaleY = scaleY - 0.2f;
                graphicView.invalidate();
                return true;
            case 3:
                angle = angle + 20;
                graphicView.invalidate();
                return true;
            case 4:
                color = color + 0.2f;
                graphicView.invalidate();
                return true;
            case 5:
                color = color - 0.2f;
                graphicView.invalidate();
                return true;
            case 6:
                if (satur == 0) satur = 1;
                else satur = 0;
                graphicView.invalidate();
                return true;
        }
        return false;
    }

}