2019-01-13
【Android App with Kotlin #2】画像を取り扱う(ImageView/ImageButton)
ImageViewとImageButtonの使い方をまとめました。
作るもの
Activity内にImageView
とImageButton
を配置し、ImageButton
をタップすると
ImageView
の画像が予め用意した画像に変わります。
環境
このコードは以下の環境で書いています。
- macOS 10.14.2(Mojave)
- Android Studio 3.2.1
- Android SDK 28
- gradle 4.6
事前準備
app/src/main/res/drawable 内に pngまたはjpgのファイルを格納します。 今回は「いらすとや」さんから適当な画像を拝借してきました。
レイアウトファイル
デザインタブから「Image View」、「ImageButton」を挿入します。ImageViewやImageButton挿入時、どの画像を使用するか選択するウィザードが表示されます。 元々入っている画像もあれば、自分で用意した画像を直ぐに利用することも出来ます。 今回はProjects内の適当な画像を選んでみました。
他にもスパナのアイコンなど、新たに用意する必要のない位デフォルトアイコンの種類が豊富なので、最初に画面上部の検索バーから探してみるのも良いかもしれません。
テキストタブでレイアウトやコードの微修正します。
Java1<?xml version="1.0" encoding="utf-8"?> 2<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 5 android:layout_height="match_parent"> 6 7 <ImageView 8 android:id="@+id/imgvIcon" 9 android:layout_width="wrap_content" 10 android:layout_height="wrap_content" 11 android:layout_marginTop="8dp" 12 android:layout_marginBottom="8dp" 13 android:layout_marginStart="8dp" 14 android:layout_marginEnd="8dp" 15 app:srcCompat="@mipmap/ic_launcher" 16 app:layout_constraintTop_toTopOf="parent" 17 app:layout_constraintBottom_toTopOf="@+id/imgbManage" 18 app:layout_constraintStart_toStartOf="parent" 19 app:layout_constraintEnd_toEndOf="parent" /> 20 <ImageButton 21 android:id="@+id/imgbManage" 22 android:layout_width="wrap_content" 23 android:layout_height="wrap_content" 24 android:layout_marginBottom="156dp" 25 android:layout_marginStart="8dp" 26 android:layout_marginEnd="8dp" 27 app:srcCompat="@android:drawable/ic_menu_manage" 28 app:layout_constraintBottom_toBottomOf="parent" 29 app:layout_constraintStart_toStartOf="parent" 30 app:layout_constraintEnd_toEndOf="parent"/> 31</android.support.constraint.ConstraintLayout> 32
Activityファイル
Java1class ImgActivity : AppCompatActivity(){ 2 3 override fun onCreate(savedInstanceState: Bundle?){ 4 super.onCreate(savedInstanceState) 5 setContentView(R.layout.imgv_imgb_activity) 6 7 val imgvIcon: ImageView = findViewById(R.id.imgvIcon) //[1] 8 val imgbManage: ImageButton = findViewById(R.id.imgbManage) //[2] 9 10 //[3] 11 imgbManage.setOnClickListener{ 12 imgvIcon.setImageResource(R.drawable.pose_kyosyu_boy) //[4] 13 } 14 } 15} 16
[1]、[2]
ImageView
クラス、Image Button
クラスを それぞれimgvIcon
、imgbManage
という名前で宣言します。
同時に、レイアウトファイルに用意したウィジェットのIDを引っ張ってきます。
val
は定数。 Javaのfinalと同じ。基本はこっちで宣言するといい。imgvIcon
ImageView型の定数をimgvIcon
という名前で用意するimgbManage
ImageButton型の定数をimgbManage
という名前で用意する
[3]
ImageButtonクラスが持つメソッドsetOnClickListener
を使って、
ボタンがタップされた時の動作を記述しています。
(厳密にはImageButtonクラスの親クラス、更に親クラスのViewクラスが持つメソッド)
この時、imgbManage
(すなわちImageButtonクラス)が
どんなメソッドを持っているかはここで調べられます。
[4]
setImageResource
メソッドを使って、 drawableディレクトリ内に格納した
画像のファイル名をR.drawable
というキーから指定しています。
見ての通り、拡張子は指定しません。
Activityファイル(別の書き方)
Kotlin Android extentionsが有効であれば、以下のような書き方もできます。
valの宣言文がそのまま無くせます。
Java1class imgActivity : AppCompatActivity(){ 2 3 override fun onCreate(savedInstanceState: Bundle?){ 4 super.onCreate(savedInstanceState) 5 setContentView(R.layout.imgv_imgb_activity) 6 7 8 imgbManage.setOnClickListener{ 9 imgvIcon.setImageResource(R.drawable.pose_kyosyu_boy) 10 } 11 12 13 } 14} 15
リンク
次の記事
次回はListViewです。 【Android App with Kotlin #3】ListViewを使う
前回の記事
【Android App with Kotlin #1】ボタンウィジェットを使う
/以上
よかったらシェアしてください!