■■■■■■□■■■■■■□■■■■■■□□□□□■■□■■■■■■
■■□□■■□■■□□■■□■■□□□□□■■■■■■□■■□□□□
■■□□■■□■■□□■■□■■□□□□□■■□□■■□■■■■■■
■■□□■■□■■□□■■□■■□□□□□■■□□■■□□□□□■■
■■□□■■□■■■■■■□■■■■■■□■■■■■■□■■■■■■

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Twitterクライアント

今週末は遊びっていうか、興味っていうかでTwitterクライアント作って遊んでました。
と、いってもoauth-signpost使ってるし、コードだってネットで拾ったやつばっかで、
作ったとは言うのは大げさなんですが…
それでもなかなか上手く動かなかったりして、いい時間つぶしになりましたw

見よ!この洗練されたインターフェイスwwwww
device-2012-02-19-103014.png
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2012/02/19(日) 19:44:31|
  2. HTC Aria
  3. | トラックバック:0
  4. | コメント:2

ToastみたいなPopupWindow

※書き忘れ
ToastのようにActivityはまたぎません。
あと、
private int m_nDuration = 4000;
private int m_xOffset = 0;
private int m_yOffset = 64;
この変数をToastと同じ値を取得する
ちゃんとした方法(マジックナンバーじゃなくて)
知ってる方教えてください。

AndroidToastが連続で呼ばれるとキューイングされて好みの動作にならないので、
PopupWindowを継承して、ぽいのを作ってみました(以下toasty)。
面倒なので、自分が使うファンクションだけ実装。

JavaもAndroidもプログラミングは実質半年なので、変なところは優しく教えてくださいw
特にToastyPopupWindow.java:44のキャストはダメな気がする。

m_toastyはアクティビティ内のメンバ変数で一個。
最初だけnewして、あとは使い回しで
dismissして、新しいviewをセットしてshowの繰り返し。
取り合えず所望の動作をしてくれてるので良しとします。

main.java(抜粋)
245                 if (null == m_toasty){
246                     m_toasty = new ToastyPopupWindow(m_context);
247                     m_toasty.setGravity(Gravity.CENTER|Gravity.TOP, 048);
248                     m_toasty.setDuration(5000);
249                 }
250                 else{
251                     m_toasty.dismiss();
252                 }
253 
254                 m_toasty.setView(v);
255                 m_toasty.update();
256                 m_toasty.show();


toasty.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:drawable/toast_frame"
/>


ToastyPopupWindow.java
  1 package com.android.cddatabase;
  2 
  3 import android.app.Activity;
  4 import android.content.Context;
  5 import android.os.Handler;
  6 
  7 import android.widget.RelativeLayout;
  8 import android.widget.PopupWindow;
  9 import android.widget.TextView;
 10 
 11 import android.view.View;
 12 import android.view.Gravity;
 13 import android.view.ViewGroup;
 14 
 15 import android.graphics.Color;
 16 import android.content.res.TypedArray;
 17 
 18 import java.lang.IllegalArgumentException;
 19 
 20 public class ToastyPopupWindow extends PopupWindow {
 21     private final Context m_context;
 22     private static int m_textColor;
 23 
 24     private static final int WC = ViewGroup.LayoutParams.WRAP_CONTENT; 
 25     private static final RelativeLayout.LayoutParams mLayoutParam = new RelativeLayout.LayoutParams(WC, WC);
 26 
 27     private final Handler m_hndDismiss;
 28     private final Runnable m_runDismiss;
 29 
 30     private int m_nDuration = 4000;
 31     private int m_gravity   = Gravity.AXIS_SPECIFIED | Gravity.BOTTOM;
 32     private int m_xOffset   = 0;
 33     private int m_yOffset   = 64;
 34 
 35     ////////////////////////////////////////////////////////////////////
 36     // コンストラクタ
 37     ////////////////////////////////////////////////////////////////////
 38     ToastyPopupWindow(Context context){
 39         super(context);
 40         m_context = context;
 41         setTouchable(true);
 42         setAnimationStyle(android.R.style.Animation_Toast);
 43         setWidth(WC);
 44         setHeight(WC);
 45         setBackgroundDrawable(null);
 46         View v = ((Activity)context).getLayoutInflater().inflate(R.layout.toasty, null);
 47         setContentView(v);
 48 
 49         TypedArray typedarray = m_context.obtainStyledAttributes(
 50                 new int[] {android.R.attr.textColorPrimary});
 51         m_textColor = typedarray.getColor(0, Color.BLACK);
 52 
 53         m_hndDismiss = new Handler();
 54         m_runDismiss = new Runnable(){
 55             public void run(){
 56                 dismiss();
 57             }
 58         };
 59 
 60         setOnDismissListener(new PopupWindow.OnDismissListener(){
 61             @Override public void onDismiss(){
 62                 m_hndDismiss.removeCallbacks(m_runDismiss);
 63             }
 64         });
 65     }
 66     ////////////////////////////////////////////////////////////////////
 67 
 68     ////////////////////////////////////////////////////////////////////
 69     // Toastライクなshow
 70     ////////////////////////////////////////////////////////////////////
 71     public void show(){
 72         View view = ((Activity)m_context).getWindow().getDecorView();
 73         super.showAtLocation(view, m_gravity, m_xOffset, m_yOffset);
 74         m_hndDismiss.postDelayed(m_runDismiss, m_nDuration);
 75     }
 76     ////////////////////////////////////////////////////////////////////
 77 
 78     ////////////////////////////////////////////////////////////////////
 79     // Activityがなくなってからdismissが呼ばれるとエラー
 80     // とりあえず例外処理で対処
 81     ////////////////////////////////////////////////////////////////////
 82     @Override public void dismiss(){
 83         if (isShowing()){
 84             try{
 85                 super.dismiss();
 86             }
 87             catch (IllegalArgumentException e){
 88                 e.printStackTrace();
 89             }
 90         }
 91     }
 92     ////////////////////////////////////////////////////////////////////
 93 
 94     ////////////////////////////////////////////////////////////////////
 95     // ToastライクなsetGravity
 96     ////////////////////////////////////////////////////////////////////
 97     public void setGravity(int gravity, int xOffset, int yOffset){
 98         m_gravity   = gravity;
 99         m_xOffset   = xOffset;
100         m_yOffset   = yOffset;
101     }
102     ////////////////////////////////////////////////////////////////////
103 
104     ////////////////////////////////////////////////////////////////////
105     // PopupWindowの表示時間
106     ////////////////////////////////////////////////////////////////////
107     public void setDuration(int dulation){
108         m_nDuration = dulation;
109     }
110 
111     ////////////////////////////////////////////////////////////////////
112     // ViewGroupの子ビューを全て削除してから
113     // 新しいビューをセットする
114     ////////////////////////////////////////////////////////////////////
115     public void setView(View v){
116         RelativeLayout relativeLayout = (RelativeLayout)getContentView();
117         relativeLayout.removeAllViewsInLayout();
118         relativeLayout.addView(v, mLayoutParam);
119     }
120     ////////////////////////////////////////////////////////////////////
121 
122     ////////////////////////////////////////////////////////////////////
123     // ToastのmakeTextみたいなの
124     ////////////////////////////////////////////////////////////////////
125     static ToastyPopupWindow makeText(Context context, CharSequence text, int dulation){
126         ToastyPopupWindow toasty = new ToastyPopupWindow(context);
127         TextView textView = new TextView(context);
128         textView.setTextColor(m_textColor);
129         textView.setText(text);
130         toasty.setView(textView);
131         toasty.setDuration(dulation);
132         return toasty;
133     }
134     ////////////////////////////////////////////////////////////////////
135 }
136 
137 // vim: et ts=4 sw=4

テーマ:Android - ジャンル:携帯電話・PHS

  1. 2011/11/06(日) 21:29:42|
  2. HTC Aria
  3. | トラックバック:0
  4. | コメント:0

Android+Ant+ProGuard環境でSDK r9からr14へのアップデート

Ant環境でのProGuardの使い方を
こちらのサイトを参考にさせていただき構築していたのですが、
気まぐれでSDKとplatform APIを更新したら
ビルド出来なくなったので覚書。
内容としては以下のファイルの変数名の修正です。
あと、SDK等アップデート後、プロジェクトのアップデートが必要でした。


Index: build.xml
===================================================================
--- build.xml   (リビジョン 143)
+++ build.xml   (作業コピー)
@@ -1,5 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE project [
+    <!ENTITY add-proguard-release SYSTEM "add-proguard-release.xml">
+]>
 <project name="CDDatabase" default="help">
+    &add-proguard-release;
 
     <!-- The local.properties file is created and updated by the 'android' tool.
          It contains the path to the SDK. It should *NOT* be checked into
@@ -82,4 +86,21 @@
     <!-- version-tag: 1 -->
     <import file="${sdk.dir}/tools/ant/build.xml" />
 
+    <!-- 自動.apk生成及びインストール -->
+    <macrodef name="install-release-helper">
+        <sequential>
+            <echo>Installing ${out.final.file}...</echo>
+            <exec executable="${adb}" failonerror="true">
+                <arg line="${adb.device.arg}" />
+                <arg value="install" />
+                <arg value="${adb.install.option}" />
+                <arg path="${out.final.file}" />
+            </exec>
+        </sequential>
+    </macrodef>
+
+    <target name="deploy" depends="release">
+        <install-release-helper />
+    </target>
+
 </project>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。


Index: add-proguard-release.xml
===================================================================
--- add-proguard-release.xml    (リビジョン 142)
+++ add-proguard-release.xml    (作業コピー)
@@ -9,17 +9,17 @@
 <target name="-post-compile" depends="-dex-obfuscate,-dex-no-obfuscate">
 </target>
 
-<target name="-dex-no-obfuscate" unless="build.mode.release">
+<target name="-dex-no-obfuscate" unless="build.is.mode.release">
   <mkdir dir="${obfuscate.absolute.dir}" />
-  <jar basedir="${out.classes.dir}" destfile="${android-jar-postobfuscate}" />
+  <jar basedir="${out.classes.absolute.dir}" destfile="${android-jar-postobfuscate}" />
 </target>
 
 <!-- Converts this project's .class files into .dex files -->
-<target name="-dex-obfuscate" if="build.mode.release">
+<target name="-dex-obfuscate" if="build.is.mode.release">
   <property name="proguard-jar" value="${proguard.dir}/proguard.jar" />
   <property name="proguard-conf.dir" value="" />
   <property name="proguard-conf.absolute.dir" location="${proguard-conf.dir}" />
-  <property name="proguard-conf" value="${proguard-conf.absolute.dir}/procfg.txt" />
+  <property name="proguard-conf" value="${proguard-conf.absolute.dir}/proguard.cfg" />
   <path id="fullclasspath">
     <path refid="android.target.classpath"/>
     <!-- <pathelement path="${external.libs.dir}"/> -->
@@ -31,7 +31,7 @@
   <mkdir dir="${obfuscate.absolute.dir}" />
   <delete file="${android-jar-preobfuscate}"/>
   <delete file="${android-jar-postobfuscate}"/>
-  <jar basedir="${out.classes.dir}" destfile="${android-jar-preobfuscate}" />
+  <jar basedir="${out.classes.absolute.dir}" destfile="${android-jar-preobfuscate}" />
   <proguard>
     @${proguard-conf}
     -injars ${android-jar-preobfuscate}

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。


しばらくbuild.is.mode.releaseの方に気づかずハマった~
きっとコレでいけるはず…

テーマ:Android - ジャンル:携帯電話・PHS

  1. 2011/10/21(金) 16:54:16|
  2. HTC Aria
  3. | トラックバック:0
  4. | コメント:0

Androidアプリ 作ってみた

せっかくのAndroid携帯なので、勉強も兼ねてアプリを作ってみました。
過去記事CDの管理?で使っているSQLite3データベースと互換です。

機能はC+Win32APIで作ったものよりも高く(とは言ってもw)

色々AndroidのAPIとかも使ったので初歩的な学習にはなったと思います。
以下思いつくままに…
  1. Spinner/ListView/AutoCompleteTextViewなどのコントロール類
  2. ArrayAdapterをサブクラス化しての、選択されたときハイライト表示されるListView
  3. メニュー
  4. インテント
  5. Webアクセス
  6. JSONオブジェクトの使用
  7. Thread/Runnable使ってマルチスレッド処理
こんなところかな?
6.はほんとにちょっとですが、Google AJAX Search APIのImageSearchを使って、
JSON取得して、そこから画像のURLを得て画像をDLという処理です(CDのジャケット画像取得)
7.は6.の間とバーコード読み取ったあとAmazonからhtml取得するところで
プログレスバーを表示するためにちょこっとマルチスレッド。

動画撮ってみた。テレビ付けっぱで撮ったら音がwww
でもBarcode Scannerの音残したかったし、面倒くさかったのでそのまま…
デジカメ持ってたから片手でなんやかんやするの大変だった

テーマ:Android - ジャンル:携帯電話・PHS

  1. 2011/01/30(日) 02:54:21|
  2. HTC Aria
  3. | トラックバック:0
  4. | コメント:3

Androidアプリ コンパイル メモ

ソース中に日本語を書いた時
[javac] ~hoge.java:84: 警告:この文字は、エンコーディング ascii にマップできません。
ってエラーが出る事への対処。

<プロジェクトディレクトリ>/build.propertiesに
java.encoding=utf-8
を追加する。ソースのエンコードをUTF-8にしておくのは言わずもがな。

以下、上記の方法に至るまでの過程。build.propertiesの修正のみでいけるはず!

ネットで同じ問題の対処法を探すと
<Android-SDK>/platforms/android-X/templates/android_rules.xmlの
encoding="ascii" → encoding="utf-8"
っていうのを良く見るけど、上手く行かなかった。
このandroid_rules.xml決め打ちは正しくなくて、
ちゃんとエラーログを見て、どの.xmlファイルが
インポートされているのかを確認する必要あり。
--
って、ことで探ると家の環境では
android-sdk-windows\tools\ant\main_rules.xml
に行き着いたんだけど、
main_rules.xmlではencoding=${java.encoding}
となってる。
やっぱり、こういうファイルを直で弄くるのは気がすすまないので
(散々bbLeanのコア弄ったクセに何言ってんだ!って感じですが…)
プロジェクトファイルあるファイル内で
java.encodingを宣言。
ビルドしてみたら上手く行った!めでたし。

テーマ:Android - ジャンル:携帯電話・PHS

  1. 2011/01/08(土) 15:54:47|
  2. HTC Aria
  3. | トラックバック:0
  4. | コメント:0
home 次のページ >

プロフィール

Author:nocd5
30歳(男)
会社員

Last.fm



最近の記事

--年--月--日 (--)
スポンサーサイト
2012年02月19日 (日)
Twitterクライアント
2011年11月06日 (日)
ToastみたいなPopupWindow
2011年10月21日 (金)
Android+Ant+ProGuard環境でSDK r9からr14へのアップデート
2011年01月30日 (日)
Androidアプリ 作ってみた
2011年01月08日 (土)
Androidアプリ コンパイル メモ
次 >>

カテゴリー

カレンダー

03 | 2017/03 | 04
Sun Mon Tue Wed Thu Fri Sat
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

最近のコメント

最近のトラックバック

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

Amazonアソシエイト

RSSフィード

リンク

このブログをリンクに追加する

FC2ブログランキング

FC2Blog Ranking

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。