<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6661286706720926015</id><updated>2024-09-05T13:39:19.496+09:00</updated><category term="Android開発"/><category term="Memory"/><category term="ブログの紹介"/><category term="レイアウト"/><title type='text'>H.J.M.のAndroid開発日記</title><subtitle type='html'>Androidの開発に関する記事を中心とした開発日記</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hjm-android.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6661286706720926015/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://hjm-android.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>H.J.M.</name><uri>http://www.blogger.com/profile/11538714548207664891</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6661286706720926015.post-9037193942762176985</id><published>2012-06-19T22:31:00.001+09:00</published><updated>2012-06-19T22:32:16.255+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android開発"/><category scheme="http://www.blogger.com/atom/ns#" term="レイアウト"/><title type='text'>【Android】xml attributeの使いまわし</title><content type='html'>今回はxmlで記述するAttributes(アトリビュート)の使いまわす方法を紹介したいと思います。&lt;br /&gt;
&lt;div&gt;
レイアウトファイルを書いていて、何度も同じAttributeを書いてうんざりした経験はありませんか？&lt;span style=&quot;background-color: white;&quot;&gt;知っている人も多いかと思いますが・・・&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;実は別のxmlファイルにアトリビュートを書き込んでそれを使いまわす方法があるんです。&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;やり方はものすごく簡単です。&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;まずプロジェクトのres/valuesフォルダ内に新しいxmlファイルを作ります。名前はなんでもいいですがstyle.xmlとかがわかりやすくていいかもです。&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;そしてその中の記述は：&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;pre class=&quot;brush:java;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;resources&amp;gt;
    &amp;lt;style name=&quot;image_button&quot;&amp;gt;
        &amp;lt;item name=&quot;android:layout_width&quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;
        &amp;lt;item name=&quot;android:layout_height&quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;
        &amp;lt;item name=&quot;android:adjustViewBounds&quot;&amp;gt;true&amp;lt;/item&amp;gt;
        &amp;lt;item name=&quot;android:scaleType&quot;&amp;gt;centerInside&amp;lt;/item&amp;gt;
        &amp;lt;item name=&quot;android:background&quot;&amp;gt;@null&amp;lt;/item&amp;gt;
    &amp;lt;/style&amp;gt;
    &amp;lt;style name=&quot;other_button&quot;&amp;gt;
        &amp;lt;item name=&quot;android:layout_width&quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;
        &amp;lt;item name=&quot;android:layout_height&quot;&amp;gt;wrap_content&amp;lt;/item&amp;gt;
        &amp;lt;item name=&quot;android:adjustViewBounds&quot;&amp;gt;true&amp;lt;/item&amp;gt;
        &amp;lt;item name=&quot;android:scaleType&quot;&amp;gt;centerInside&amp;lt;/item&amp;gt;
        &amp;lt;item name=&quot;android:padding&quot;&amp;gt;5dp&amp;lt;/item&amp;gt;
        &amp;lt;item name=&quot;android:background&quot;&amp;gt;@null&amp;lt;/item&amp;gt;
    &amp;lt;/style&amp;gt;
&amp;lt;/resources&amp;gt;&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;という風に書きます。&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;そしてそれを使うには使用したいレイアウトに&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;pre class=&quot;brush:java;&quot;&gt;&amp;lt;ImageButton
        android:id=&quot;@+id/testButton&quot;
        style=&quot;@style/image_button&quot;
        android:src=&quot;@drawable/test_button_on_off&quot; /&amp;gt;&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
こんな感じで書きます。そうすると指定したアトリビュートが全て加えられます。さらに、完全に検証したわけではありませんが、styleに書いたアトリビュートでも、レイアウトファイルの方で指定するとオーバーライドすることができるので、このボタンだけ幅や高さを他と変えたいというときにはわざわざ新しいstyleを作るよりかはそのAttributeだけを書き足すだけのほうが楽です。&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;またxmlのファイル名とは関係無しに&amp;lt;style name=&quot;hoge&quot;&amp;gt;とスタイル一つ一つにつけられた名前を使用するので複数のxmlファイルに記述することも可能です。いろんなstyleを使うようになってbutton_style.xml、text_style.xmlといった風にそれぞれのビューごとに作るのもいいかも知れません。&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;Androidはリソースファイルを好きなフォルダに分けて置くことができないので、こうして少しでもわかりやすく、メンテナンスしやすい管理方法というのは身に着けてそん&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hjm-android.blogspot.com/feeds/9037193942762176985/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hjm-android.blogspot.com/2012/06/androidxml-attribute.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6661286706720926015/posts/default/9037193942762176985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6661286706720926015/posts/default/9037193942762176985'/><link rel='alternate' type='text/html' href='http://hjm-android.blogspot.com/2012/06/androidxml-attribute.html' title='【Android】xml attributeの使いまわし'/><author><name>H.J.M.</name><uri>http://www.blogger.com/profile/11538714548207664891</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6661286706720926015.post-8410020160887494375</id><published>2012-05-19T01:52:00.003+09:00</published><updated>2012-05-19T01:52:53.206+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android開発"/><category scheme="http://www.blogger.com/atom/ns#" term="Memory"/><title type='text'>【Android】BitmapによるOut of Memoryについて</title><content type='html'>今回はBitmapが原因で起きるOut of Memory Errorについて書きたいと思います。&lt;br /&gt;
これは筆者が作ったアプリがOS2.3まではサクサク動いていたのに4.0のGalaxy Nexusを使用した際にロードが極端に遅くなりOut of Memory Errorで落ちる現象が起き、色々調べた結果わかったことを書きます。&lt;br /&gt;
&lt;br /&gt;
もちろんBitmapをロードしたりしたらちゃんとbitmap.recycle();を使ったほうがいいですし、その直後に強制的にSystem.gc();を使って強制的にGarbage Collectionを呼んだらいいとよく書かれています。それらをやっても落ちることがあります。&lt;br /&gt;
&lt;br /&gt;
Androidのリソースフォルダの中には色々なdrawableで始まるフォルダがあります。&lt;br /&gt;
デフォルトはdrawableですが、プロジェクトを新たに作るときは（対応OSバージョンにもよりますが）drawable-ldpi, drawable-mdpi, drawable-hdpi, drawable-xhdpiとあります。&lt;br /&gt;
&lt;br /&gt;
これらは端末の解像度（正確には画面の密度）によって選択するリソースを変えるためにあります。本来の使い方であればそれぞれのフォルダに違うサイズに切り分けた同じ名前の画像ファイルを入れます。ただし、ファイルが大きくなってしまうので画像を１枚だけ用意してデフォルトのdrawableやmdpiのフォルダに入れる人も多いかと思います。筆者もそうでした。&lt;br /&gt;
&lt;br /&gt;
Androidのシステムはまずリソースから画像を取って来いといわれたら端末の解像度に一番あったフォルダから探します。内場合は徐々に下っていき、最終的にはデフォルトのフォルダから引っ張ってきます。もし端末の解像度に合ったフォルダから取ってきた場合はその画像を拡大・縮小してロードします。&lt;br /&gt;
&lt;br /&gt;
もしdrawable-mdpiのフォルダに画像を入れていて端末がxhdpiの端末の場合画像をかなり拡大してロードされます。特に大きな画像（背景など）はかなりのダメージを受けます。&lt;br /&gt;
そして筆者のミスはdrawableフォルダに画像を入れていたことでした。drawableのフォルダは実はdrawable-mdpiと同じ扱いを受けるのです。&lt;br /&gt;
&lt;br /&gt;
例えば720x1280の背景画像を使うとしましょう。これをdrawable, drawable-mdpiなどのフォルダに入れるとxhdpiやhdpiの端末では拡大してロードされます。hdpiでは約1.5倍、xhdpiでは約2倍のサイズでロードされます。&lt;br /&gt;
&lt;br /&gt;
なので、画像はそれぞれのサイズに合ったフォルダに入れましょう。720x1280の画像をxhdpiのフォルダに入れればxhdpiの端末ではそのままロードされます。そしてmdpiの端末では縮小してロードされます。&lt;br /&gt;
&lt;br /&gt;
ただし、あまりにも拡大・縮小率が高くなるとやはり画像は荒くなります。&lt;br /&gt;
そこで、drawable-nodpiというフォルダをつくり、画像を入れると、どの端末でも画像そのままのサイズで使ってくれます。ただし、なんでもかんでも全部これに入れると、メモリの少ない端末などではOOMを起こしてしまうようになるので気をつけましょう。また逆に拡大・縮小してくれるとありがたい素材などもあります（ボタンなど）。&lt;br /&gt;
&lt;br /&gt;
なので、なるべく画像はその画像のサイズに適したフォルダにいれるようにしましょう！また画像を用意するときにサイズをよく考えて作りましょう。&lt;br /&gt;
もし１サイズしか用意できないのであれば恐らくhdpi辺りのサイズの画像がいいでしょう。２サイズ用意できるのであれば大きめと小さめなどを用意しておくといいかもしれません。&lt;br /&gt;
&lt;br /&gt;
とにかく大事なのは、Androidではシステムが自動でリソース画像を拡大・縮小するという事を知っておくことです。Androidは色々な解像度の端末があり、それに対応するための便利なシステムではありますが、同時にちゃんと理解していないとメモリの無駄遣いやOOMエラーに繋がります。&lt;br /&gt;
&lt;br /&gt;
ちなみに筆者のアプリは90%~98%のメモリusageだったところが画像をフォルダ移動しただけで50%台まで落ちました。（これは3.0以降の端末となります。3.0まではBitmapはDalvik heapではなくnative heapに保存されていたのでDDMSのheap dumpでは見れませんでした。見る方法はありますが・・・）&lt;br /&gt;
&lt;br /&gt;
というわけでOOMエラーに悩まされている方は一度リソースを置いているフォルダをもう一度確認してみてください！&lt;br /&gt;
&lt;br /&gt;
英文ですが、詳しくは下のAndroid Developersのサイトに詳しく書かれています。&lt;br /&gt;
&lt;a href=&quot;http://developer.android.com/guide/practices/screens_support.html&quot;&gt;http://developer.android.com/guide/practices/screens_support.html&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://hjm-android.blogspot.com/feeds/8410020160887494375/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hjm-android.blogspot.com/2012/05/androidbitmapout-of-memory.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6661286706720926015/posts/default/8410020160887494375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6661286706720926015/posts/default/8410020160887494375'/><link rel='alternate' type='text/html' href='http://hjm-android.blogspot.com/2012/05/androidbitmapout-of-memory.html' title='【Android】BitmapによるOut of Memoryについて'/><author><name>H.J.M.</name><uri>http://www.blogger.com/profile/11538714548207664891</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6661286706720926015.post-7155869531709564086</id><published>2012-05-13T00:27:00.004+09:00</published><updated>2012-05-20T19:15:43.429+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android開発"/><title type='text'>【Android】Androidで袋文字(Outlined Text)の表示</title><content type='html'>題名通り、今回はAndroidでの袋文字の表示の仕方について書きたいと思います。&lt;br /&gt;
&lt;br /&gt;
フォントファイルを使用することも可能ですが、日本語だとフォントファイルが大きくなったりで、容量の少ないアプリなどを作る際には割りに合わないというケースも多いと思います。&lt;br /&gt;
&lt;br /&gt;
そこで、キャンバスを使用して、袋文字を作る方法を今回は紹介したいと思います。筆者も色々と研究してこれが多分一番シンプルでわかりやすいだろうと思った手法を紹介したいと思います。&lt;br /&gt;
&lt;br /&gt;
ではまずコードから。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java;&quot;&gt;public void draw(Canvas canvas) {
  Paint paint = new Paint();
  
  int outlineColor = Color.WHITE;     //袋文字のふちの色
  int outlineWidth = 4;               //袋文字のふちの幅
  String text = &quot;表示したいテキスト&quot;;
  int textColor = Color.BLACK;        //テキストの色
  int start = 0;                      //表示するテキストの開始位置
  int end = text.length();            //表示するテキストの終了位置+1
  int x = 0;                          //canvasに描画したいx座標
  int y = 0;                          //canvasに描画したいy座標
  
　//アンチエイリアスを設定（これをしないとギザギザになる）
　paint.setAntiAlias(true);
　
　//ふちの部分を描画
  paint.setColor(outlineColor);
  paint.setStyle(Paint.Style.STROKE);
  paint.setStrokeWidth(outlineWidth);
  canvas.drawText(text, start, end, x, y, paint);
  
　//実際のテキストを描画
  paint.setColor(textColor);
  paint.setStyle(Paint.Style.FILL);
  canvas.drawText(text, start, end, x, y, paint);
 }
&lt;/pre&gt;
&lt;br /&gt;
という感じでやると袋文字が完成します。&lt;br /&gt;
最初はtextPathというのを使ってやってみたんですが、途中でずれだしたりして、clipを使用する方法も考えましたが、4.0からはHardware Accelerationを外さないとclipは使えないのでこれが一番シンプルでいいんじゃないかと思います。&lt;br /&gt;
&lt;br /&gt;
いくつか注意点としては：&lt;br /&gt;
&lt;br /&gt;
AntiAliasは必ず設定してください。文字がギザギザになってしまいます。
&lt;br /&gt;
&lt;br /&gt;
paint.setAntiAlias(true);
&lt;br /&gt;
&lt;br /&gt;
他にはstartとendは必要ない場合は使わなくても大丈夫です。drawTextにはstartとendを必要としないバージョンも存在するので。&lt;br /&gt;
canvas.drawText(text, start, end, x, y, paint);&lt;br /&gt;
は&lt;br /&gt;
canvas.drawText(text, x, y, paint);
&lt;br /&gt;
でも大丈夫です。&lt;br /&gt;
&lt;br /&gt;
あと、実際に使用する際はPaintオブジェクトや各種設定用変数は他で指定するなりしたほうがいいです。あくまでサンプルコードとしてとらえていただければと思います。&lt;br /&gt;
&lt;br /&gt;
筆者はこれをカスタマイズしたTextViewに組み込んでTextViewと同じ用に使えるようにしています。カスタマイズしたTextViewの書き方はまた後日紹介したいと思います。</content><link rel='replies' type='application/atom+xml' href='http://hjm-android.blogspot.com/feeds/7155869531709564086/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hjm-android.blogspot.com/2012/05/androidandroid.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6661286706720926015/posts/default/7155869531709564086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6661286706720926015/posts/default/7155869531709564086'/><link rel='alternate' type='text/html' href='http://hjm-android.blogspot.com/2012/05/androidandroid.html' title='【Android】Androidで袋文字(Outlined Text)の表示'/><author><name>H.J.M.</name><uri>http://www.blogger.com/profile/11538714548207664891</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6661286706720926015.post-1025682172734323396</id><published>2012-05-12T00:49:00.000+09:00</published><updated>2012-05-12T23:31:32.279+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ブログの紹介"/><title type='text'>初投稿</title><content type='html'>初投稿です。宜しくお願い致します。&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
このブログではAndroid開発に関することを中心に書いていこうと思っています。&lt;/div&gt;
&lt;div&gt;
日々の開発で気づいたことや、質問があったことなど、他の人にも役立ちそうな情報を提供できたらなと思っています。&lt;/div&gt;
&lt;div&gt;
また、要望があれば英語の記事や、フォーラムなどの翻訳も時間の許す限り行っていきたいと思っています。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
筆者は米国の工科大を卒業後、日本に帰国し現在アンドロイドアプリ開発のプログラマーとして働いています。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
更新は不定期になることが予想されますが、ちょっとずつ記事を増やし、ブログも強化していこうと思っています。&lt;br /&gt;
&lt;br /&gt;
またここに掲載されるコードは全て商用、私用問わず、自由に使っていただいてかまいません。&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
ブログ初心者なので至らないところも多々あるかと思いますが、宜しくお願い致します。&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hjm-android.blogspot.com/feeds/1025682172734323396/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://hjm-android.blogspot.com/2012/05/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6661286706720926015/posts/default/1025682172734323396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6661286706720926015/posts/default/1025682172734323396'/><link rel='alternate' type='text/html' href='http://hjm-android.blogspot.com/2012/05/blog-post.html' title='初投稿'/><author><name>H.J.M.</name><uri>http://www.blogger.com/profile/11538714548207664891</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>