かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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