Hatena::ブログ(Diary)

チラシ裏日記上等!! このページをアンテナに追加 RSSフィード

2012-09-18

onTouchEventを使ってタッチで画像を変えるコード

| 00:10 | onTouchEventを使ってタッチで画像を変えるコード - チラシ裏日記上等!! を含むブックマーク onTouchEventを使ってタッチで画像を変えるコード - チラシ裏日記上等!! のブックマークコメント

機種変をしてIS03がフリーになったのでこれをアプリの開発機にしてAndroidアプリ開発にチャレンジして見たいと思います。本当は仕事でやりたかったなぁと思いつつ、今後仕事でやることもあるだろうと思いレッツ勉強!

Androidといえばタッチなのでとりあえずタッチイベントで適当に画像が変わるコードを書きました。

package net.chirashiura.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.view.MotionEvent;
import android.widget.ImageView;

public class HelloWorld extends Activity{

	int imageID = R.drawable.theta;

	ImageView imgView = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		imgView = new ImageView(this);

		imgView.setImageResource(imageID);
		setContentView(imgView);
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {

		if(event.getAction() == MotionEvent.ACTION_DOWN){
			if(imageID == R.drawable.theta){
				imageID = R.drawable.rena;
			} else {
				imageID = R.drawable.theta;
			}

			imgView.setImageResource(imageID);
		}
		return super.onTouchEvent(event);
	}
}

とても簡単にできました。ちょっとonTouchEventメソッドのeventのあたりで多少手間取ったぐらいです。

onTouchEventの引数として与えられているMotionEventのインスタンスからgetActionメソッドでどんなアクションをしたのか取得してそれがACTION_DOWN、画面が押されたかどうかで判定して画面が押されたようであれば画像を変える処理が走るという感じ。恥ずかしくなるぐらいしょぼいですね。

実際のスクリーンショットではこんなのがタッチをすると。

f:id:Tomato-360:20120919000657p:image

こんなのに変わります。

f:id:Tomato-360:20120919000658p:image

画像は気にしないでください。

IS03って結構しょぼい端末ですけど、タッチで画像を変えるぐらいならさくさく動きます。とりあえずIS03を基準にして開発を行っていけば他の端末では快適なのかなぁと思ったり。

しばらくは重いアプリは作れないとおもうけど少しずつできることを増やしてゆくゆくはゲームなんか作りたいですね。

2012-07-19

AspectJというものを触る

| 23:39 | AspectJというものを触る - チラシ裏日記上等!! を含むブックマーク AspectJというものを触る - チラシ裏日記上等!! のブックマークコメント

仕事でAspectJを使うことになったのでメモ。

AspectJ独自の構文を使ってアスペクトを作るのだけど、javaらしくない書き方というか、とにかく慣れないので普通のクラスをアスペクトにする。アノテーション@Aspectclassの前につけるとそのクラスがアスペクトになる。同じように@Pointcutと@Beforeや@Afterをメソッドの前につけるとAspectJ独自の構文と同じようにポイントカットとアドバイスを定義できる。

package com.rakugakicho.testaspect;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class MyAspect {

	@Pointcut("call(@MyAnnotation * *.*(..))")
	public void MyPointCut(){

	}

	@Before("MyPointCut()")
	public void beforeMethod(){
		System.out.println("before");
	}

	@After("MyPointCut()")
	public void afterMethod(){
		System.out.println("after");
	}
}

@Pointcutのなかのcallにはアスペクトを織り込むメソッドを書き込む。ここではワイルドカードである*をつけて全てのクラスの全てのメソッドを指定している。ただ全てのメソッドを指定すると自分のメソッドまで指定してしまって都合が悪いのでアノテーションを使って織り込むメソッドを限定している。このアノテーションでの指定がかなり強力だと思っている。指定したメソッドのログをとりたいと思ったらアノテーションをつけてやればいいという感じでいろいろできそう。

実際に織り込むクラスを以下に示す。

package com.rakugakicho.testaspect;

public class TestMain {
	public static void main(String[] args){
		TestMain testMain = new TestMain();

		testMain.testMethod();
	}

	@MyAnnotation
	public void testMethod(){
		System.out.println("test");
	}
}

package com.rakugakicho.testaspect;

public @interface MyAnnotation {
  //アノテーションの書き方実はよくわかってない
}

実行結果は以下のようになる。

before
test
after

ちゃんと織り込まれている。

いろいろできそうだけどいまいち使い方がわからない。でもちょっとおもしろいので仕事以外にも活用してみたい。

本もウェブ上にもあまり情報がないが、この本が役に立ちそう。

AspectJ in Action: Enterprise AOP with Spring Applications

AspectJ in Action: Enterprise AOP with Spring Applications

洋書で骨が折れそうだが、まぁ英語の勉強にもなると思って読んでみることにする。

2012-05-27

Servletでsessionを管理するときのメモ

| 23:09 | Servletでsessionを管理するときのメモ - チラシ裏日記上等!! を含むブックマーク Servletでsessionを管理するときのメモ - チラシ裏日記上等!! のブックマークコメント

個人的メモ。Servletとかでsessionを管理するとき使うと便利なリスナ。session作成時と破棄時の処理が書けるのでいろいろと使い道がありそう。

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener
public class MyWebListener implements HttpSessionListener{

	@Override
	public void sessionCreated(HttpSessionEvent arg0) {
		//セッション作成時の処理を書く

	}

	@Override
	public void sessionDestroyed(HttpSessionEvent arg0) {
		//セッション破棄時の処理を書く

	}

}

Servlet 3系列なのでアノテーションがついてる。このアノテーションをつけておくと自動的に判別してくれる。便利。

2012-05-15

JSONを扱うGsonというライブラリが便利

| 23:06 | JSONを扱うGsonというライブラリが便利 - チラシ裏日記上等!! を含むブックマーク JSONを扱うGsonというライブラリが便利 - チラシ裏日記上等!! のブックマークコメント

JSON形式のデータをjavaで扱うときGoogleの提供しているGsonというライブラリを使うとかなり簡単にできたのでそれのメモを残す。

GsonはJSONの文字列をオブジェクトにしたりオブジェクトをJSONの文字列にしたりできる。オブジェクトのフィールドの名前はそのままJSONのキーの名前になる。GetterとSetterをもつオブジェクトでそれを表現してデータを扱う。

//JSONを扱うオブジェクト
package net.rakugakicho.gsontest;

public class GsonObj {
	int id;
	String hoge;
	String huga;

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getHoge() {
		return hoge;
	}
	public void setHoge(String hoge) {
		this.hoge = hoge;
	}
	public String getHuga() {
		return huga;
	}
	public void setHuga(String huga) {
		this.huga = huga;
	}

	@Override
	public String toString(){
		return "id : " + id + " ,hoge : " + hoge + " ,huga : " + huga;
	}
}
//テスト用のメインクラス
package net.rakugakicho.gsontest;

import com.google.gson.Gson;

public class GsonTest {
	public static void main(String[] args){
		//JSONの文字列からオブジェクトへ
		Gson gson = new Gson();

		//JSON形式の文字列
		String json1 = "{id:1,hoge:hoge,huga:huga}";

		//値を格納するオブジェクト
		GsonObj gObj1 = new GsonObj();

		gObj1 = gson.fromJson(json1, GsonObj.class);

		System.out.println(gObj1.toString()); //id : 1 ,hoge : hoge ,huga : huga と出力される



		//オブジェクトからJSONの文字列へ
		GsonObj gObj2 = new GsonObj();

		gObj2.setId(2);
		gObj2.setHoge("hogehoge");
		gObj2.setHuga("hugahuga");

		String json2 = gson.toJson(gObj2);

		System.out.println(json2); //{"id":2,"hoge":"hogehoge","huga":"hugahuga"}と出力される
	}
}

かなり単純に実装できるので便利。javaで仕事するときは重宝しそう。

他にもGoogleのJavaライブラリではGuavaというライブラリーがあって、このライブラリの中のMultiMapというデータ構造がかなり便利なので、そのうちまたメモに残す予定。

2012-04-21

Mavenでresourcesフォルダのファイルを読み込みたいとき

| 14:06 | Mavenでresourcesフォルダのファイルを読み込みたいとき - チラシ裏日記上等!! を含むブックマーク Mavenでresourcesフォルダのファイルを読み込みたいとき - チラシ裏日記上等!! のブックマークコメント

Mavenでプロジェクト作っていろいろやってたとき、外部ファイルを読み込む処理をどうやるのかちょっとはまったのでメモします。割とコードは簡単なのでひょっとしたら当たり前のことなのかも知れないけど、誰かがはまっている可能性も否定できないよね?

結構単純でこんな感じ。

getClass().getResourceAsStream("hogehoe.txt");

これはファイルを読み込むためのもので、InputStreamを返してます。

これ書くのにずいぶん時間食った。時間を無駄にしましたねぇw