ゲームはつねにテクノロジーの最先端を行っている。

それから、プログラマーが初めて手がけるのがゲームである場合が多い。
こういうとこには理由がある。

1つには、とても優秀なプログラマーは、自室で遊んでいる15歳の子供たちの中にいる、という事実に関係している。

そして別の理由もある。ゲームにはハードのお尻を叩く傾向がある、ということだ。

いまのコンピュータを見ると、何をするにも十分な早さで動いている。
でもハードの限界をテストする時は、アクションゲームを使う。いま人気の3Dってやつだ。


最近ゲームしてないな、なんて思いながら。

ゲームは友人宅などでは遊びますが、自分で所有したとなるゲーム専用機はPCエンジンSUPER CD-ROM2だった気がする。どんだけ昔なんだという話ですが。。。

Linux開発者のLinus Torvaldsの自伝を古本屋さんで見かけて読んでます。
上記はその中から引用しました。Linux興味あるなあ。

それがぼくには楽しかったから (小プロ・ブックス)それがぼくには楽しかったから (小プロ・ブックス)
著者:リーナス トーバルズ
販売元:小学館プロダクション

販売元:Amazon.co.jp
クチコミを見る


さて、前回はTwitterのパブリックタイムラインをリスト表示しました。
今回はそれにアイコン画像、ユーザー名も表示してみようと遊んでみた。

twittericon

しかし、日本語のツイートって多い。
この画像はその中でも日本語の多い部分を選んで撮ってますが、思った以上に存在感があります。
もっと英語に埋もれるのかと思っていました。
ちょうど時差の関係で英語圏の人は寝てて、日本人が多くつぶやく時間帯だったのかもしれませんが。

GoogleTrendで調べてみました。あれま、国別のtwitter.comへの訪問ユーザ数で日本が1位だ。

2010年から伸びて落ち着いてきてる感じでしょうか。

twitteruser

twitteruser2



さて、それではプログラミング。

今回も無事に動きました。

前回のTextViewベースのレイアウトからアイコン画像などを表示するためにLinearLayoutベースに作り直しています。

新たにTwitterDataクラスとTwitterAdapterクラスを作成。

コードは例によって続きをご覧ください。

では、また次の更新でお会いしましょう

プログラミングはパソコンがあればマネして打ち込ちこんで、実際に動くところがホントに楽しい。


//TwitterClientActivity.java

package com.xun.TwitterClient;


import java.net.URL;

import org.xmlpull.v1.XmlPullParser;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.widget.ListView;

public class TwitterClientActivity extends Activity {
 ListView listViewTimeline;
 TwitterAdapter adapter;
 
 final String TIMELINE_URL = "http://twitter.com/statuses/public_timeline.xml";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        listViewTimeline = (ListView)findViewById(R.id.ListViewTimeline);
        adapter = new TwitterAdapter(this,R.layout.list);
        showTimeline();
    }
    public void showTimeline(){
     XmlPullParser xmlPullParser = Xml.newPullParser();
     
     try{
      URL url = new URL(TIMELINE_URL);
      xmlPullParser.setInput(url.openStream(),"UTF-8");
      
      int eventType;
      String text = "";
      String name = "";
      String iconURL = "";
      while((eventType = xmlPullParser.next())!= XmlPullParser.END_DOCUMENT){
       if(eventType == XmlPullParser.START_TAG){
        if(xmlPullParser.getName().equals("text")){
         text = xmlPullParser.nextText();
        }else if
        (xmlPullParser.getName().equals("screen_name")){
         name = xmlPullParser.nextText();
        }else if
        (xmlPullParser.getName().equals("profile_image_url")){
         iconURL = xmlPullParser.nextText();
         
         adapter.add(new TwitterData(text,name,iconURL));
        }
       }
      }
     }catch(Exception e){
      Log.e("TwitterClient","open error:" + e.toString());
        }
       listViewTimeline.setAdapter(adapter);
    }
}


//TwitterData.java

package com.xun.TwitterClient;


public class TwitterData {
 String text;
 String name;
 String iconURL;
 
 public TwitterData(String text,String name,String iconURL){
  
  this.text = text;
  this.name = name;
  this.iconURL = iconURL;
 }
}

//TwitterAdapter.java

package com.xun.TwitterClient;


import java.net.URL;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class TwitterAdapter extends ArrayAdapter<TwitterData>{

 LayoutInflater inflater;
 int layoutId;
 public TwitterAdapter(Context context, int textViewResourceId) {
  super(context, textViewResourceId);
  // TODO Auto-generated constructor stub
  inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  layoutId= textViewResourceId;
 }

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
  // TODO Auto-generated method stub
  
  View view = convertView;
  if(view == null){
   view = inflater.inflate(layoutId, null);
  }
  TextView textViewText = (TextView)view.findViewById(R.id.TextViewText);
  TextView textViewName = (TextView)view.findViewById(R.id.TextViewName);
  ImageView imageViewIcon = (ImageView)view.findViewById(R.id.ImageViewIcon);
  
  TwitterData twitterData = getItem(position);
  textViewText.setText(twitterData.text);
  textViewName.setText(twitterData.name);
  
  try{
   Drawable icon = Drawable.createFromStream(new URL(twitterData.iconURL).openStream(), null);
   imageViewIcon.setImageDrawable(icon);
  }catch(Exception e){
  }
  return view;
 }
}



//main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
<ListView
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:id="@+id/ListViewTimeline">
</ListView>
</LinearLayout>


//list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
<ImageView
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" android:id="@+id/ImageViewIcon">
</ImageView>
<LinearLayout
 android:id="@+id/LinearLayout01"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" android:orientation="vertical">
<TextView
 android:text="@+id/TextView01"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:id="@+id/TextViewName"
 android:textColor="#FFFFCC"
 android:textStyle="bold">
</TextView>
<TextView
 android:text="@+id/TextView02"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" android:id="@+id/TextViewText">
</TextView>
</LinearLayout>
</LinearLayout>


//AndroidManifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.xun.TwitterClient"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".TwitterClientActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="8" />

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>