かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Android WearのWearableListViewで、中央の項目以外を選択出来ないように見せる

めんどくさかった…!

以下の記事のソースをもとに作成します。

WearableListView.Itemを実装したクラスを作成

色々あるけど、onScaleUpStartで中央にあるときの表示を制御して、onScaleDownStartで中央以外にあるときの表示を制御するっぽいです。そして、WearableListView.Itemを実装したクラスは、WearableListViewの要素になるので、前回FrameLayoutをlist_view_item.xmlにおいていたのと差し替えます。とりあえずさくっとFrameLayoutを継承しつつWearableListView.Itemを実装!

package com.example.kazuki.myapplication;

import android.content.Context;
import android.support.wearable.view.WearableListView;
import android.util.AttributeSet;
import android.widget.FrameLayout;
import android.widget.TextView;

/**
 * Created by Kazuki on 2014/08/01.
 */
public class ListViewItem extends FrameLayout implements WearableListView.Item {
    private TextView textView;

    public ListViewItem(Context context) {
        super(context);
    }

    public ListViewItem(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ListViewItem(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        this.textView = (TextView) this.findViewById(R.id.textView);
    }

    @Override
    public float getProximityMinValue() {
        return 0f;
    }

    @Override
    public float getProximityMaxValue() {
        return 0f;
    }

    @Override
    public float getCurrentProximityValue() {
        return 0f;
    }

    @Override
    public void setScalingAnimatorValue(float scale) {
    }

    @Override
    public void onScaleUpStart() {
        this.textView.setAlpha(1f);
    }

    @Override
    public void onScaleDownStart() {
        this.textView.setAlpha(0.5f);
    }
}

list_view_item.xmlの変更

FrameLayoutを使っていた部分を上記で作ったListViewItemに置き換えます。

<?xml version="1.0" encoding="utf-8"?>

<com.example.kazuki.myapplication.ListViewItem
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="New Text"
        android:id="@+id/textView"/>
</com.example.kazuki.myapplication.ListViewItem>

実行して動作を確認

実行すると、真ん中の以外はいい感じに半透明になってるのがわかります。

f:id:okazuki:20140801191833p:plain