2011年2月15日火曜日

Toastクラスを利用してタップした位置にトーストを表示する - Displaying a toast near the tapped position using Toast class -

このエントリーをはてなブックマークに追加
Toastクラスはテキストメッセージを素早く表示する機能を実現します。このToastクラスを利用して、画面をタップしたとき、そのタップした位置付近にトーストを出現させ、そこに座標を表示するプログラムを作りました。

A Toast class has the function displaying the textual message quickly. Using the Toast class, we coded the program that a toast appears near the tapped position, and the tapped position is displayed in the toast.




トースト(toast)とは
情報通知用の一時的な小さなウィンドウのことだそうです。トーストは、何かしらのアクションや状態変化が起きた場合に現れ、一定時間が経過すると消えるようになっています。ちなみにtoastという英単語を調べると、名詞では焼いた薄切りのパン(トースト)のことで、動詞ではパンなどを”焼く”とか"あぶる"といった意味をもっていました。ネーミングセンスがすごくいい感じです。


Toastクラスのメソッド
void setDuration(int duration)
トーストの表示時間を設定します。引数には、表示時間の長さを決定するToastクラスのフィールドLENGTH_LONG、LENGTH_SHORTを指定します。

void cancel()
トーストが表示されていた場合、このメソッドを呼び出すと強制的にトーストを閉じることができます。

void setGravity(int gravity, int xOffset, int yOffset)
トーストの表示位置を設定します。引数には、オブジェクトの配置方法、x軸の位置、y軸の位置を指定します。

void setView(View view)
トーストのビューを設定します。

void show()
トーストを表示します。


ソースコード
ソースコードは「Beta.java」と「ToastView.java」の2つです。「Beta.java」はToastViewを表示するためのアクティビティです。「ToastView.java」は、タップした位置付近にトーストを表示する機能を実装しました。

/LayoutTest/src/org/example/layout/Beta.java
package org.example.layout;

import android.app.Activity;
import android.os.Bundle;

public class Beta extends Activity{
     @Override
     public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(new ToastView(this));
     }
}

/LayoutTest/src/org/example/layout/ToastView.java
package org.example.layout;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class ToastView extends View{
     Toast toast;
     TextView textView;

     public ToastView(Context context) {
          super(context);
          toast = new Toast(context);
          textView = new TextView(context);
          textView.setTextColor(0xff000000);
          toast.setDuration(Toast.LENGTH_SHORT);
     }

     @Override
     protected void onDraw(Canvas canvas) {
          Paint rect = new Paint();
          rect.setColor(0xffffffff);
          canvas.drawRect(0, 0, getWidth(), getHeight(), rect);
     }

     @Override
     public boolean onTouchEvent(MotionEvent event) {

          switch(event.getAction()) {
          case MotionEvent.ACTION_DOWN:
               toast.cancel();
               break;
          case MotionEvent.ACTION_UP:
               int x = (int) event.getX();
               int y = (int) event.getY();
               String string = "" + x + ", " + y;
               toast.setGravity(Gravity.TOP|Gravity.LEFT, x, y);
               textView.setText(string);
               toast.setView(textView);
               toast.show();
               break;
          }

          return true;
     }
}


実行結果
白いビュー中の適当な位置をタップすると、そのタップした位置の右上付近に座標が表示されます。そして、一定時間経つと消えます。



タップしてはいけない位置や、入力項目に不備がある場合に表示する警告ウィンドウとして、トーストがすごく使えそうです。

0 件のコメント:

コメントを投稿