Help us understand the problem. What is going on with this article?

はじめて作る(かなりの)クソAndroidアプリ

この記事は N高等学校 Advent Calendar 2019 の24日目の記事です。かなり血迷っています。

ぴえんぴえん♡´・ᴗ・`♡わっしょいわっしょいべびたっぴ〜wwwwwwwwwwww

あけましておめでとうございます。
今年も終わるので流行りに乗ってみたN高1年のエモ系ファッションエンジニアはぎたそです。
そーたとかハギーとかで呼んでください。
https://twitter.com/___soprog

主にAndroidアプリを書いています。
趣味では自称エモいアプリを作り、業務では毎日の料理を楽しくする会社のお手伝いを少しですがさせてもらっています。

得意なことはクラッシュ駆動開発です。

はじめに

かなりひどいクソアプリを開発してしまいました。あまりにひどすぎてくだらなすぎるのでみんなにも作ってほしくなったので記事を書いています。コードコピペするだけで作れるのでぜひお好きにカスタムしてもっとクソにしてください。お願いします。

作っていくクソアプリ

実用性に長けたアプリです。
こちら👇

20191223_233105.gif

~なんか画像が怖くなるアプリ~

です。このアプリを使えば怖くなります。

主な機能は

  • 画像がぶるぶるして怖くなる

以上です。
意味がわからないかもしれませんが、やっていきましょう。やっていくことが大事です。

つくる

わいの環境

  • macOSMojave
  • AndroidStudio3.5.3

開発環境の構築

Androidアプリ開発にはAndroidStudioという統合開発環境を使います。
残念ながらおじさんは面倒くさがりな不親切なので開発環境の構築については話しません。
これでも見ていい感じにやってください。
[Mac]
https://qiita.com/yacchi1123/items/75303c0ad05a188a28eb
Windowsだともう少し面倒なはずです。ググってください。

プロジェクトを作る

Android Studioの設定を済まして起動をすると以下のような画面が表示されると思います。

新しくプロジェクトを作るには、一番上のStart a new Android Studio projectをクリックしてください。

クリックするとこんな画面が出るかと思います。
スクリーンショット 2019-12-23 22.55.23.png
これはプロジェクトのテンプレートを選ぶ場所です。
今回はまっさらな状態で作りたいので、Empty Activityを選択してNextで次に進みます。
個人的にはテンプレートはあまり使わないです。
スクリーンショット 2019-12-23 22.56.03.png
次の画面は、上から
プロジェクトの名前、package名、保存先、言語、サポートするAndroidバージョンの下限を設定する画面です。

今回は
Name - Yabami (好きな名前)
Package name - me.soprog.yabami (適当で良い、ホントは一意に保つため自分の持ってるドメインをひっくり返して入れたりする。)
Save location - (どこでも)
Language - Kotlin (もうAndroidではあたりまえ)
Minimum API level - API19 Android 4.4 (割と普通)
にします。

チェックックスは画像と同じ状態にして、finishをクリックしてください。
すると、こんな画面になります。
スクリーンショット 2019-12-23 22.56.19.png
ぐるぐるしてるのでぐるぐるが終わるのを待ってください。
スクリーンショット 2019-12-23 23.29.31.png
これでプロジェクトを作ることができました。

素材を読み込む

背景になる画像、メインの画像を探してきてください。
見つかったらファイル名を英小文字にし、resフォルダの中にあるdrawableフォルダに画像をコピペしてください。
スクリーンショット 2019-12-24 0.53.38.png
こんなかんじ。

書く

さて、コードを書いていきます。

Androidは、見た目とロジックを別のファイルにわけて記述していくことが多いです。
見た目はxml、ロジック部分はKotlinで書きます。
その2つをそれぞれ紐付けして形にしていくわけです。
プロジェクトを作った状態ですでにMainActivity.ktactivity_main.xmlというファイルがあると思います。(shiftキーを二会押すとかんたんに検索することができます。)
このファイルたちに変更を加えて怖いアプリを作っていきます。

今回は見た目を先に作ってしまいましょう。
activity_main.xmlを開いてください。ここで見た目を作っていきます。
Android StudioにはGUIでレイアウトを構成できるモードと、xmlをベタで書いて構成するモードがあります。
一見GUIのほうが楽に感じるかもしれませんが、GUIはかなり使いにくいのでxmlで記述していきましょう。
スクリーンショット 2019-12-24 0.29.46.png
下の方のTabになっているところのTextボタンをクリックします。
スクリーンショット 2019-12-24 0.29.49.png
こうなります。

一度すべて消してから下のコードをコピペしてください。

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    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:background="@drawable/背景画像のファイル名"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/メイン画像のファイル名"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="32dp"
        android:gravity="center"
        android:text="お好みの文字列を入れてね"
        android:textColor="お好みのカラーコードを入れてne"
        android:textSize="40sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

これでレイアウトができました。

この状態で一度実行してみましょう。
実行方法はこの辺を見てください。
https://qiita.com/noriseto/items/fe6eca453713051be218#%E3%82%A8%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%BF%E3%81%A7%E5%AE%9F%E8%A1%8C

...

何も怖くないです。今のままだとまだ何も怖くないのでぶるぶるさせて見た人を恐怖のどん底に落としこむようなものにしていきましょう。

MainActivity.ktを開いてください。
これをコピペして(((

MainActivity.kt
package me.soprog.yabami

import android.os.Bundle
import android.view.animation.*
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val alphaAnimation = AlphaAnimation(1f, 0.6f).apply {
            duration = 1500L
            repeatMode = Animation.REVERSE
            repeatCount = Animation.INFINITE
        }

        val translateAnimation = TranslateAnimation(0f, 10f, 0f, 20f).apply {
            duration = 10L
            repeatMode = Animation.REVERSE
            repeatCount = Animation.INFINITE
        }

        val rotateAnimation = RotateAnimation(0f, 360f).apply {
            duration = 20L
            repeatMode = Animation.REVERSE
            repeatCount = Animation.INFINITE
        }

        text.startAnimation(
            AnimationSet(true).apply {
                addAnimation(rotateAnimation)
            }
        )

        image.startAnimation(
            AnimationSet(true).apply {
                addAnimation(alphaAnimation)
                addAnimation(translateAnimation)
                addAnimation(rotateAnimation)
            })
    }
}

実行してくだいさ。

...
...
...

20191223_233105.gif
いええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええい!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

MainAcitivy.kt

val alphaAnimation = AlphaAnimation(1f, 0.6f).apply {
            duration = 1500L
            repeatMode = Animation.REVERSE
            repeatCount = Animation.INFINITE
        }

        val translateAnimation = TranslateAnimation(0f, 10f, 0f, 20f).apply {
            duration = 10L
            repeatMode = Animation.REVERSE
            repeatCount = Animation.INFINITE
        }

        val rotateAnimation = RotateAnimation(0f, 360f).apply {
            duration = 20L
            repeatMode = Animation.REVERSE
            repeatCount = Animation.INFINITE
        }

このへんの数値をイジイジすればアニメーションの挙動が変わるので、自分が満足する怖さに仕上げてください。

ちなみに怖さを出すコツは

  • 怖い画像を使う
  • ヒステリックに動かす

ことです。

さいごに

クリスマスイブにかなりひどい記事を出してしまったことをお詫び申し上げます。
みなさんも無茶なアドベントカレンダーへの立候補にはお気をつけください。
ご機嫌よぅ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした