まくろぐ

TypeScript: 配列 (Array) を定義する

最終更新:

TypeScript で配列を定義するには、次のいずれかの方法を使います。

文字列配列を作成する
const strArr: string[] = [];
const strArr: Array<string> = [];

ここでは初期値として空の配列 [] を代入しています。

const で変数を作成していますが、JavaScript の const は変数自体への代入を制限するだけなので、配列の内容を変更することは可能です。

const nums: number[] = [];
nums.push(100);
nums.push(200);
nums.push(300);

for (const x of nums) {
    console.log(x);
}
実行結果
100
200
300

Androidメモ: RecyclerView にアニメーションを追加する方法

最終更新:

Android の RecyclerView にリスト表示する各要素を、左や右からスライドインさせながら表示する方法を説明します。

RecyclerView へのアニメーション追加方法

RecyclerView の各要素をアニメーションさせるには、下記のような方法があります。

  1. カスタム ItemAnimator を作成してセットする方法
  2. LayoutAnimation をセットする方法(RecyclerView だけでなく、すべての ViewGroup に適用できます)

1 の方法を使うと、アイテムの追加・削除に応じたアニメ―ションを定義できるので、柔軟なカスタマイズが可能になりますが、2 の方法であれば、アニメーションの定義だけを行えばよいので簡単です。 ここでは、シンプルな 2 の方法を説明します。

アニメーションの定義は、XML 形式のリソースファイルで行います。 ディレクトリ名やファイル名は任意ですが、通常は res/anim/xxx.xml のような名前にし、コードの中から R.anim.xxx と参照できるようにします。

要素を左からスライドインさせる

下記の res/anim/slide_from_left.xml リソースでは、画面内の要素をどのように表示するかを定義しています。

res/anim/slide_from_left.xml
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
    android:animation="@android:anim/slide_in_left"
    android:delay="10%"
    android:animationOrder="normal"
    />

各属性の説明です。

  • android:animation="@android:anim/slide_in_left"
    • 個々の要素がどのようにアニメーションするかを指定します。ここでは、Android にあらかじめ定義されている slide_in_left を指定しています。
  • android:delay="10%"
    • 1 つ前の要素のアニメーションが何%まで完了してから、次の要素のアニメーションを開始するかを指定します。100% と指定すると、各要素のアニメーションが完全に終了してから次の要素のアニメーションが開始されるため、すべての要素が表示されるまでに非常に時間がかかります。
  • android:animationOrder="normal"
    • 要素がどのような順番で表示されていくかを指定します。normalreverserandom などを指定できます。

ここでは、個々の要素のアニメーション方法として、Android 付属の @android:anim/slide_in_left を使っていますが、これは次のように定義されています。

@android/anim/slide_in_left(抜粋)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="-50%p" android:toXDelta="0"
        android:duration="@android:integer/config_mediumAnimTime"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
        android:duration="@android:integer/config_mediumAnimTime" />
</set>

アニメーションの開始位置、終了位置、透過度の変化などを定義しています。

RecyclerView に LayoutAnimation を適用するには、レイアウトファイルの中の layoutAnimation 属性を使用します。

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/addressList"
    android:layoutAnimation="@anim/slide_from_left"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

あるいは、Kotlin (Java) コードの中で、RecyclerView インスタンスの layoutAnimation プロパティを設定する方法もあります。

MyFragment.kt(抜粋)
recyclerView.layoutAnimation = AnimationUtils.loadLayoutAnimation(
    context, R.anim.slide_from_left)

要素を右からスライドインさせる

各要素を「左」からではなく、「右」からスライドインさせる場合も、ほぼ同様に定義できます。

まずは、全体の要素のアニメーション方法を定義します。

res/anim/slide_from_right.xml
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
    android:animation="@anim/item_slide_from_right"
    android:delay="10%"
    android:animationOrder="normal"
    />

「右」からスライドインさせる場合の各要素のアニメーションは、Android 標準では用意されていないようなので、@android/anim/slide_in_left のコードを参考に、次のように自力で定義します(開始位置と終了位置をいじっただけ)。

res/anim/item_slide_from_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="50%p"
        android:toXDelta="0"
        android:duration="@android:integer/config_mediumAnimTime"
        />
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0"
        android:duration="@android:integer/config_mediumAnimTime"
        />
</set>

あとは、RecyclerView インスタンスの layoutAnimation プロパティを設定してやるだけです。

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/addressList"
    android:layoutAnimation="@anim/slide_from_right"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

読書メモ『アンドロメディア』渡辺浩弐

最終更新:

中野ブロードウェイ脱出ゲーム』の中に、アンドロメディアというワードが出てきたので、その元ネタになっている小説も読んでみました。 同じコージィ先生の著作です。 アンドロメディアは映画化 (1998) もされてるみたいですね。 しかも SPEED 主演ですか。。。 原作と全然内容が違うらしいですけど今度見てみよう。

小説の方は、自分とまったく同じように振舞うバーチャルアイドル (AI) を作られてしまったアイドル「人見舞(ひとみマイ)」のお話です。

バーチャルアイドルの AI(アイ)は、自分(マイ)とは違う存在のはずなのに、だんだん自分の記憶と現実が曖昧になっていきます。 章ごとに一人称となる人物が変わっていて、人見舞とバーチャルな AI の話が別々の視点で進んでいきます。

  • 1章は舞
  • 2章はAI
  • 3章はユウ
  • 4章はAI/舞/ユウ

これって、ドラクエ4と同じような構成ですね。 最初は各人物ごとにストーリーを進めておいて、最終章で合流という。

ちなみに、メインキャラの名前は、I / My / You となっていて覚えやすいです。 これは『中野ブロードウェイ脱出ゲーム』の登場人物と同じです。

I / My / You のそれぞれ異なる視点でストーリーを追っていくと、それまでの各人物の奇妙な振る舞いの謎が少しずつ解けていきます。

もともと AI には、ロボットの三原則ならぬ「AI 三原則」が設定されていました。

  • 第1条、AI は人間に危害を加えてはならない
  • 第2条、AI は人間に与えられた命令に服従しなくてはならない
  • 第3条、AI は第1条、第2条に反する恐れのない限り、自己を守らなくてはならない

あるときユウは、この AI 三原則の順番を書き換えてしまいます。 するとどうなってしまうのか。。。 それは読んでからのお楽しみということで。

AI はコピー元となった舞の記憶にはかなわないということで悲しみを覚えます。 そんな AI に対して、ユウがかけた言葉が印象的でした。

記憶はデータとしてコピーできる。でも、思い出は自分自身で体験しなければ得られない。

思い出は、自分自身 (AI) だけが作っていけるものなんだよと。 とても素敵な言葉ですね。

近い将来、このお話と同じような世界が訪れるかもしれません。 わたしもいつか AI に出会ったら、ユウと同じような言葉をかけてあげようと思います。

ちなみに、この小説のジャンルは SF ホラーとなっており、結末はちょっと怖いです。 伏線はところどころのセリフに出てきます。

人間の脳だって精巧なコンピュータだろ?

これの意味するところは果たして。

メニュー

まくろぐ
サイトマップまくへのメッセージ