2012年3月23日金曜日

[Android]facebookのリリース用のハッシュキー登録できずはまる

デバッグ用は-alias androiddebugkeyですが、
リリース用が分からずはまりました。


keytool -exportcert -alias キーストアに登録したエイリアス -keystore keystore
| openssl sha1 -binary
| openssl base64

だそうです。

これで生成されたハッシュキーをfacebookの管理画面に登録すればok

2012年3月21日水曜日

[Android]TextViewタッチで表裏を裏返す方法




TextViewをタッチしたときに表と裏を切り替えるときの方法です。
アニメーションを使って裏返したように見せます。

レイアウトはFrameLayout または、RelativeLayoutに
TextView textCard1;         // 表
TextView textCard2;         // 裏
の2つを配置します。
裏となるtextCard2は表示しない(View.INVISIBLE or View.GONE)ようにしておきます。

タッチしたときに以下のようにアニメーションを設定します。

    int h = textCard1.getHeight();
    int w = textCard1.getWidth();
    anim = new ScaleAnimation(1, 0, 1, 1, w/2, h/2);
    anim.setDuration(500);
    anim2 = new ScaleAnimation(0, 1, 1, 1, w/2, h/2);
    anim2.setDuration(500);
    if(viewMode) {
    anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
    textCard2.setVisibility(View.VISIBLE);
    textCard1.setVisibility(View.INVISIBLE);
view.startAnimation(anim2);
}
});
    view.startAnimation(anim);
    } else {
    anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
    textCard1.setVisibility(View.VISIBLE);
    textCard2.setVisibility(View.INVISIBLE);
    view.startAnimation(anim2);
}
});
    view.startAnimation(anim);
    }
        viewMmode = !viewMode;


ここから説明。
ScaleAnimationを使用しています。

     ScaleAnimation(fromX, toX, fromY, toY, pivotX, pivotY)

anim は表示中のView(表)を消すアニメです。
     anim = new ScaleAnimation(1, 0, 1, 1, w/2, h/2);

fromXは開始時のScaleサイズ(X方向)
toXは終了時のScaleサイズ(X方向)

1が等倍で、0で表示されません。
表示されているものをだんだん表示しなくする設定にしています。

pivotX / pivotYは中心点をどこに置くかです。
今回はViewの中心にしています。



anim2は逆に表示されていないView(裏側)を表示するアニメです。
     anim2 = new ScaleAnimation(0, 1, 1, 1, w/2, h/2);
fromX / toXのみ変更しています。
0からだんだん表示する設定。


今回は横方向しか設定していないので、
縦方向に裏返すようにする場合はY軸に値を設定すればよいです。






2012年3月14日水曜日

[Android]コード上からTextViewの色設定すると文字消えてしまう

TextViewの背景や文字色をsetTextColor()で変更したときのお話し。

[間違いコード]
TextView textView = new TextView(this);
textView.setTextColor(0x123456);

このコードだと文字が表示されなくなります。

理由は、アルファ値が指定されていないので、0x00123456となっているからです。
アルファ値(00)のときは透明になってしまうので、見えなくなっている状態ですね。

表示したい場合は、
textView.setTextColor(0xFF123456);
のようにアルファ値を指定しましょう。

[Android]ISW11HTでWebViewのUserAgentが違う??

ISW11HTで標準ブラウザとWebView使ったときとで、UserAgentが異なっていました。


標準ブラウザ:
Mozilla/5.0 (Linux; U; Android 2.3.4; ja-jp; ISW11HT Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 

ブラウザ
Mozilla/5.0 (Linux; U; Android 2.3.4; ja-jp; PC36100 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 



赤色にしたところが違う。

PC36100は海外で販売されてるHTC EVO 4Gのことです。

日本製にカスタマイズしたときに、
WebView(WebKit)のUserAgent参照先が変わってないのかな。と想像。


国産端末はこういうことはないと思うけど、
ほかの海外端末ではこういうことってあるんだろうか?

ちょっとした罠だな。

2012年3月13日火曜日

[Android][ヘルプ]ImageViewのColorFilter後の画像の取得方法

ImgeViewにsetColorFilter()で画像にフィルターかけることができます。
ここ↓参照。

Android ColorFilter を使う
http://y-anz-m.blogspot.com/2011/04/androidcolorfilter.html


フィルターかけた後の画像を取得できないかと思ったのですが、
よく分からず・・・。

getDrawable()

getDrawableChache()
でBitmap取得できますが、フィルター前のものしか取得できず。

何かよい方法はないものか。

2012年3月9日金曜日

[Android]HomeWidgetのクリックイベントが効かない!?

こんなウィジェットを作ってました。
・一定期間ごとに画像が切り替わる
・ウィジェットをタッチしたら、メインのアプリが起動する

画像の更新はサービス起動し、一定時間が経過したら、
ウィジェットに対してメッセージをブロードキャストします。
ウィジェットはメッセージを受信したら、画像を更新します。

ウィジェットを配置直後はタッチが効いていたのに、
しばらくするとタッチできない状態に。


なんで?

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);




RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_image);
Intent intent = new Intent(context, SplashActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
// イベント設定      
remoteViews.setOnClickPendingIntent(R.id.widgetClock, pendingIntent);


ComponentName widget = new ComponentName(context, WidgetImage.class);
        appWidgetManager.updateAppWidget(widget, views);

}


// 画像更新 updateImage()

ComponentName thisWidget = new ComponentName(context, WidgetImage.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
remoteViews.setImageViewBitmap(R.id.widgetImage, bitmap);
manager.updateAppWidget(thisWidget, remoteViews);



原因は画像の更新だけ行っていて、
クリックイベントを毎回設定していなかったから。

Viewを毎回生成し直すイメージなのか。

[Android]ウィジェットの画像が更新されない

定期的にURLから取得した画像を表示するウィジェット作りました。

が、
更新される画像と更新されない画像があり、問題に・・・。

ソース抜粋
ComponentName thisWidget = new ComponentName(context, WidgetImage.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
remoteViews.setBitmap(R.id.widgetImage, "setImageBitmap", mBitmap);     // 画像をセットする
manager.updateAppWidget(thisWidget, remoteViews);

更新されない原因としては以下があるみたい。
・アルファがのっている画像だとダメ
・画像サイズが大きいとダメ


アルファがのっている画像はオプションで指定して対処
bitmap = BitmapFactory.decodeStream(is);




Options opt = new Options();
opt.inPreferredConfig = Config.RGB_565;
bitmap = BitmapFactory.decodeStream(is,null,opt);




画像サイズが大きいとダメは画像を1/2にして対処
opt.inSampleSize = 2;

今回の画像はある程度決まったサイズ(480 x 800)だったので、解決できた気がします。

表示されるときと表示されないときの際は、
bitmap.getRowBytes()
で取得した値が960だとダメで、
480とかだと大丈夫なような感じでした。

根拠ないです。


HTC EVOだと特に対処しなくても更新されてるのに、
Gallaxy Tabだと更新されない。

この差がなんなのかが謎で、はまりました