Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

Androidアプリ開発初心者がkotlinでカラーピッカーを作ってみるよ! その1

 

 どうも!LSSです!

 

 今回は自身の学習を目的に、カラーピッカーを作ってみて、その作っていく様子をブログの記事ネタにします。

 自分と同じ初心者の方には参考になる部分があれば、熟練者(未来の自分含む?)には「俺にもこんな時期があったな~」と微笑ましく見ていただければ幸いです!

 

AndroidStudioで新規作成

 いつものようにEmptyActivityを選んで、次の画面はこんな設定でいきます。
(自分の場合、学習中はプロジェクト名を日付+何を作ろうとしたか、って感じにしています。) 

 

f:id:little_strange:20190919214725p:plain

 いっぺん設定してしまうと、その後はNameしか書き換えません。

 

 そして、次の画面のココ!

 

f:id:little_strange:20190919215001p:plain

 

 このimportの左の+を、自分の場合は予めクリックして開いておきます。

 

f:id:little_strange:20190919215223p:plain

 

 これまでいくつか作ってきて、importが済んでるかどうか不安になって後から開く事がよくあったので、それなら先に開いておいてしまおう!って感じです。
 今はまだよく分っていないから、ってだけかもですけどね。

 

xmlを編集するよ~

f:id:little_strange:20190919215834p:plain

 次に、タブでxmlのほうを選んで、Designのほうを選んでから、Component Treeの
「ConstraintLayout」を右クリックして、「Convert view」を選びます。

 すると変更するレイアウト候補が出てくるので、今回は「LinearLayout」を選択、Applyします。

 

f:id:little_strange:20190919220318p:plain

 こうなります。

 どうもまだ、ConstraintLayoutが好きになれないのでこんな事しています^^;。

 で、毎度おなじみのHelloWorldのテキストビューを削除して、「Widgets」からの「SeekBar」をマウスドラッグでつまみ、下にある「LinearLayout」の配下になるようにドロップします。

f:id:little_strange:20190919220834p:plain

 

↓こうなればOK!

 

f:id:little_strange:20190919221303p:plain

 

 そして今、設置したSeekBarが選択された状態のまま、画面右の「Attributes」から、いくつか項目を探して書き換えます。

「id」→「sbR」に打ち換え

「layout_width」→「match_parent」を選択

「max」→「255」と入力

「progress」→「0」と入力

「background」→「#FF0000」と入力

 

…おおっと、ここで気がつきましたが、LinearLayoutが(horizontal)になってました!

 LinearLayoutを選択して、右のAttributesから、

「orientation」→「vartical」を選択しておきます。

 

xmlをテキスト表示モードで編集するよ~

 ここまで終わったら、Design画面を離れてText画面に変更します。

f:id:little_strange:20190919223358p:plain

 

 画面を切り替えると、

<?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">

<SeekBar
android:id="@+id/sbR"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FF0000"
android:max="255"
android:progress="0" />
</LinearLayout>

…てなコードになっているかと思います。

 ここで、

android:background="#FF0000"

の行の最後にカーソルを合わせて、キーボードのEnterキーを2回たたきます。

 すると、2行分のスキマができるので、そのスキマの上の方の行にカーソルを合わせ

「p」とだけ打つと、いくつかの変換候補が出てきて、その中に

f:id:little_strange:20190919224056p:plain

android:progressTint」ってのがあるので、それをEnterキーかダブルクリックで選択します。

android:progressTint=""

と変換されるので、この""の間に「#FFFFFF」と入力します。

そして、残る1行分のスキマにカーソルを合わせ、今度は「t」とだけ打つと、

f:id:little_strange:20190919224502p:plain

android:thumbTint」ってびがあるので、それを選択します。

android:thumbTint=""

と変換されるので、先ほどと同様、この""の間に「#FFFFFF」と入力します。

 

 結果、

<SeekBar
android:id="@+id/sbR"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FF0000"
android:progressTint="#FFFFFF"
android:thumbTint="#FFFFFF"
android:max="255"
android:progress="0" />

というコードになります。

progressTintはシークバーのツマミより左側のラインの色で、
thumnTintがシークバーのツマミそのものの色を設定します。

「#FFFFFF」で白色になります。

 

コピペ便利!!

 ここまで出来たら、

<SeekBar

の行から、

    android:progress="0" />

の行までを マウスドラッグまたはキーボードのカーソルキーとシフトキーで選択し、Ctrl+Cでクリップボードに取り込みます。

f:id:little_strange:20190919230133p:plain

 取り込んだら、

    android:progress="0" />

 の行と、


</LinearLayout>

の行の間にまた、Enterキーでいくつかスキマ行を開けてあげて、そこに先ほどコピーした数行のSeekBarタグを2回、Ctrl+Vで貼り付けます。
(結果、SeekBarタグは3つになります。)

 この時点で、3つのSeekBarタグの

android:id="@+id/sbR"

の行が全て、赤い波線がついてしまっています。

 idが重複してますよ!!っていう警告ですね。

ですので、1つめのSeekBarはそのままにしておいて、2つめ、3つめのSeekBarのidを別のものに打ち換えます。

 今回は、2つめを「sbG」、3つめを「sbB」に打ち換えます。

 あともう一か所。

android:background="#FF0000"

の行、こちらも1つめのSeekBarはそのままにしておいて、2つめ、3つめのSeekBarを打ち換えます。

「#FF0000」の部分を、2つめは「#00FF00」に、3つめは「#0000FF」に変更します。

 

閑話休題

 ここでちょっと一休み。 

 sbRとか#FF0000とか意味不明なものを連発したので、ちょこっと説明。

 まず「sbR」「sbG」「sbB」、これはkotlin的には全く意味のない、自分が勝手に考えた文字列です。

 idに設定する文字列は「kotlin的に意味のない(予約語でない)」文字列にする必要があるため、勝手に決めました。

 今回作った3つのシークバーは、「赤」「緑」「青」の強さをそれぞれ調整して、混ぜ合わせた色を作るためのものなので、
「赤のシークバー」→「seekbarRED」→略して「sbR
という感じに、LSSがマイルールで付けた名前です。
(「任意の文字列」というやつです。)

 任意の文字列なので、この記事を見て真似てみようと思う方がおられましたら、各自もっと自分向きの名前に変えてしまってかまわない部分です^^

 

 で、「#FF0000」は、任意の文字列ではありません。
 kotlinに限らず、他のプログラム言語(HTMLとかも)で色を表すのに使われる文字列で、その中身は「#」のあとの6桁の16進数、これは実際は2桁×3で構成され、「1つめの2桁」は赤、「2つめの2桁」は緑、「3つめの2桁」は青、の強さを表現しています。

 16進数なので、最低値「00」(これは10進数でいうところの0)から、最高値「FF」(これは10進数でいうところの255)の数値を表現できる事になります。
(最初にDesign画面で「max」(シークバーの最大値)に設定した「255」って数値はこれに合わせるためです。)

 一つめのシークバーのbackgroundに設定した「#FF0000」は、
赤が「FF」で緑が「00」で青が「00」、赤だけが最高に強いので、
「真っ赤」を表現する事になります。

 二つめのシークバーのbackgroundは「#00FF00(緑だけ最強)」、
三つめのシークバーのbackgroundは「#0000FF(青だけ最強)」に設定した、
というのが今やった作業の内容になります。

 

再び、Design画面へ

 ここで、もう一度Design画面に戻ってみます。

  

f:id:little_strange:20190919234103p:plain


 ちょっと画面の色が部分的に賑やか~になってきましたねw

 

…てなところで、「その1」はここでいったん終わります。 

 次回に続きますので、よろしくです!