2014年10月31日金曜日

[android] Android Studioを0.8.14にあげる

Windows Vistaです。
Andoroid Studioのアップデートがあったのでアップデートしてみました。

でました警告。

http://tools.android.com/knownissues
を読めとおっしゃっているので読んでみました。
sdk/フォルダを移動しろとおっしゃっているようなので移動しました。
移動したらRetryです。

しばらくすると以下のようなダイアログがでました。
続けるにはProceedを押せと書いてあるようにみえたのでProceedを押しました。



Android Studioが再起動しました。
最後にこんなのがでました。


最初に移動したsdk/フォルダの場所を教えてあげました。
JDKの場所も教えてあげました。

アップデートできました!






2014年10月25日土曜日

[android] GridView(ListView)を水平スクロールする

androidで「GridView(ListView)を水平スクロール」したかったんです。
①HorizontalScrollView内にLinearLayoutかなにかを置いてさらにその中にGridViewをいれる。コードで要素数に合わせて列数を計算したり、幅を計算したりする。
two-way-gridview を使う
Galleryを使う(This class was deprecated in API level 16.)

いずれもすばらしい方法です。私には思いつきもしませんでした。
敬意を表します。

第4の選択肢がでてきました。
Designに書いてある順に自然と並ぶのもGoodです。
RecyclerViewを使う」です。
RecyclerViewには、setLayoutManager(RecyclerView.LayoutManager layout)というメソッドがあるのですが、ここの引数に、
new StaggeredGridLayoutManager(int, StaggeredGridLayoutManager.HORIZONTAL)を指定するんです。一番目の引数が行数となります。

こんなのができました。
行数=3にしています。
サムネイル画像をタップすると、大きな画像を取得して表示します。


Creating Apps with Material Designここを参考にしました。
さらにDisplaying Bitmaps Efficientlyで勉強したこともまぜこんでみました。
GitHubに置いておきます。
jp.torifuku.ui. TorifukuAdapterとそれを呼び出している
jp.torifuku.recyclerviewsample. MyFragment#onCreateView()あたりがポイントです。
ぜひ読書日記の見た目をよくしていきたいものです。
(いつのことになるのやら?)




2014年10月11日土曜日

[android]Android StudioでAdMob

自分用のメモです。

こちらに書いてありました。

Eclipseとの違いはGoogle Play Servicesの追加の仕方くらいでしょうか。
1. SDK Managerで、下のほうにあるExtras配下のGoogle Play servicesとGoogle Repositoryを最新にしておく
2. build.gradleのdependenciesのところに、「compile 'com.google.android.gms:play-services:5.+'」を追加
(Eclipseでやったときはもっと面倒だったような気がします。これがGradleの力なのでしょうか、よくわかっておりませんが)


あとの手順はEclipseで作るときと同じだとおもいます。
1. AndroidManifest.xmlに下記を追加
<uses-permission android:name="android.permission.INTERNET"/>

<meta-data android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

<activity android:name="com.google.android.gms.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:theme="@android:style/Theme.Translucent" />

2. あとはxmlとコードを駆使して、com.google.android.gms.ads.AdViewが表示されるようにする
最初に紹介したページではFragmentを使っていました。
xmlで設定するときはAdViewの外側のRelativeLayout/LinearLayoutとかに、xmlns:ads="http://schemas.android.com/apk/res-auto"を忘れずに!(お恥ずかしい話ではございますが、昔これに気づくまで2時間くらいかかったことがあります……)

2014年9月24日水曜日

[android] Failed to complete Gradle Execution

Android Studio 0.8.9
Windows Vista

私の場合、起動時にBuild -> Rebuild Projectをすると必ず下記のメッセージで失敗します。
それでも根気よく続けていると成功して、それからは順調です。

Failed to complete Gradle execution
Cause:
A fatal exception has occurred. Program will exit

毎回面倒なので調べてみると、解決策がこちらにありました。
File -> Settings -> Gradle
"Gradle VM options:"に-XX:MaxHeapSize=256m -Xmx256mと入力する。

ありがとうございました!

2014年9月22日月曜日

[android]R.javaがつくられない、新規作成したandroidプロジェクトでActivityが作られない

$ eclipse -cleanで解決しました。

もう少し具体的な症状ですが、
・iMac
・起動時にプロジェクトに赤い×がついているプロジェクトが2、3ヶ月前からたくさんあった。あまりメンテナンスしていないアプリだったのでほったらかしていました。メンテナンスしたいアプリがビルドできなくなっていて焦りました。
・Project -> Cleanをすると、ビルドが成功するプロジェクトもあった
・Project -> Cleanをしてもビルドが失敗するプロジェクトではR.javaが生成されていなかった
・androidのプロジェクトを新規作成すると、最後のActivity作成画面が消えない。キャンセルで閉じてプロジェクトをみると、なんだか白い。srcの下が空っぽ。
・Mac OSX 10.9.4 -> 10.9.5に直前にあげた(無関係かも?)

なんだかわからなかったのですが、eclipse -cleanをして起動するとビルドが成功するようになりました。

2014年9月6日土曜日

パソコンが壊れた → ほこりをはらったら治りました。

2008年ころに買ったDELLのデスクトップパソコンが壊れました。
ある日突然、電源を入れても、ビープ音が鳴るばかりで全然立ち上がってくれませんでした。

よく考えてみると、そうなる前の半年くらいは、いつもファンの音がうるさかったです。
けたたましい音がしていました。
でもまあ使えていたから、うるさいなあとは思っていましたがそのまま使っていました。

もう駄目かなあと思っていたのですが、
DELL ビープ音 4回」とかで検索すると、中を開けてメモリを挿し直すと治ったというような方が結構いらっしゃって、駄目でもともとでやってみました。

不器用ですし余計壊してしまうんじゃないかと不安でしが、やるだけやってみました。


するとなんと治りました!


ファンのところにホコリがたくさんたまっていました。
エアーダスターでブシューとやりました。
ただ治っただけではなく、ファンの音も静かになり、心持ち動作が軽くなったような気がします。

でもまたいつ壊れるかわからないので大事なデータはバックアップが必要だなあとかおもいました。

2014年5月18日日曜日

[Java]java.util.stream

int sum = widgets.stream()
                      .filter(w -> w.getColor() == RED)
                      .mapToInt(w -> w.getWeight())
                      .sum();
こ、これは?
Java(Java Platform SE 8)なんです。

従来の書き方だとこんな感じでしょうか。
public class Widget {
    private COLOR color;
    private int weight;
    
    public enum COLOR {
        RED,
        YELLOW,
        BLUE
    }
    
    public Widget(COLOR color, int weight) {
        this.color = color;
        this.weight = weight;
    }
    
    public COLOR getColor() {
        return color;
    }
    
    public int getWeight() {
        return weight;
    }
}

List<Widget> widgets = new ArrayList<Widget>() {{
    add(new Widget(RED, 1));
    add(new Widget(RED, 2));
    add(new Widget(YELLOW, 3));
    add(new Widget(BLUE, 4));
    add(new Widget(RED, 5));
}};
Stream<Widget> stream = widgets.stream();
Predicate<Widget> predicate = new Predicate<Widget>() {
    @Override
    public boolean test(Widget w) {
        return w.getColor() == RED;
    }
};
stream = stream.filter(predicate);
ToIntFunction<Widget> tif = new ToIntFunction<Widget>() {
        @Override
        public int applyAsInt(Widget w) {
            return w.getWeight();
        }
};
IntStream is = stream.mapToInt(tif);
int sum = is.sum();
System.out.println("sum: " + sum);


-----------------------------------
Rubyで書くとこんな感じです。
class Widget
  attr_accessor :color, :weight
  def initialize(color, weight)
    @color = color
    @weight = weight
  end
end
sum = [Widget.new(:RED, 1), Widget.new(:RED, 2), Widget.new(:YELLOW, 3), Widget.new(:BLUE, 4), Widget.new(:RED, 5)].select{ |w| w.color == :RED }.inject(0){ |memo, obj| memo += obj.weight }
p sum