2011年11月30日水曜日
[Android][Help]動画のコマ送り・コマ戻しの方法(注:できてないです)
数日調べて分からなかったので調査結果だけをメモします。
・Androidではフレームごとのデータを取得する方法がAPIでは用意されていない。
(VideoView や MediaPlayerではそのようなAPIがないということ。)
・MediaMetadataRetriever を使えば、指定の時間の画像を取得できそうだが、
試してみると先頭 / 先頭+1のフレームしか取れない。 http://developer.android.com/reference/android/media/MediaMetadataRetriever.html
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(getApplicationContext(), uri); int time = 1500; // 取得したい時間(ms)
Bitmap bitmap = mmr.getFrameAtTime(time);
//mmr.getFrameAtTime(time, MediaMetadataRetriever.OPTION_NEXT_SYNC); // 先頭の次のフレーム取得する
//mmr.getFrameAtTime(time, MediaMetadataRetriever.OPTION_PREVIOUS_SYNC); // 先頭フレーム取得する
//mmr.getFrameAtTime(time, MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
if(bitmap != null) {
imageView.setImageBitmap(bitmap);
}
・VideoView / MediaPlayer のseekTo()で指定秒数に飛ばしてすぐにpause()すると、
映像が更新されない。
// ボタン押したら、コマ送り
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int pos = mMediaPlayer.getCurrentPosition();
// mMediaPlayer.start(); // 絵が更新されないので、再生してみる(→更新されない)
mMediaPlayer.seekTo(pos + 150); // 150ms加算してコマ送り
mMediaPlayer.start(); // 絵が更新されないので、再生してみる(→更新されない)
videoView.invalidate(); // 強制的に描画(→更新されない)
mMediaPlayer.pause();
}
}
・MediaPlayer でシーク完了(setOnSeekCompleteListener)したときに処理しても、映像が更新されない
// ボタン押したら、コマ送り
button.setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
int pos = mMediaPlayer.getCurrentPosition();
mMediaPlayer.seekTo(pos + 150); // 150ms加算してコマ送り
}
}
// button押下後、イベントはきている
mMediaPlayer.setOnSeekCompleteListener(new OnSeekCompleteListener() {
@Override
public void onSeekComplete(MediaPlayer mp) {
if(isSeek) {
int time = mp.getCurrentPosition();
mp.start();
mp.pause();
}
}
});
なぜなぜ分析してみる
・getFrameAtTime()で先頭フレームしか取得できないのはなぜ?
パラメータの設定の仕方が悪いの?
・pause中のseekTo()で画像が更新されないのは理解できるとして、
pause -> start()したときに画像が更新されないのはなぜ?
だれかヘルプm(__)m
できたこと、わかったこと
・seekTo()とかgetFrameAtTime()使わずに、コマ送り(風)な処理はできました
mMediaPlayer.start(); // 再生して、
try {
Thread.sleep(33); // 指定秒数スリープしたあとに、
} catch (InterruptedException e) { }
mMediaPlayer.pause(); // 一時停止する
ただこの方法だとコマ戻しができないのです。
コマ戻しするには秒数指定するしかないですよね。
困った。どうしましょう
2011年11月25日金曜日
[Android]LoadingImageView
ロード中が分かるようにしたくてViewを作ってみました。
| → |
プロジェクト一式はGumroadから購入できます。
メインとなるビューです。
public class LoadingImageView extends RelativeLayout {
private Context mContext;
private ImageView mImageView;
ProgressBar mProgressBar;
public LoadingImageView(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
LayoutParams layoutParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
setLayoutParams(layoutParams);
this.mImageView = new ImageView(context);
this.mImageView.setLayoutParams(layoutParams);
this.mImageView.setScaleType(ScaleType.CENTER_CROP);
layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
layoutParams.addRule(CENTER_IN_PARENT);
this.mProgressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleLarge);
this.mProgressBar.setLayoutParams(layoutParams);
// this.mProgressBar.setVisibility(View.GONE);
addView(this.mImageView);
addView(this.mProgressBar);
}
使い方は、
MainActivity.class
setContentView(R.layout.main);
loadingImageView = (LoadingImageView)findViewById(R.id.loadingImageView);
// Set ImageView default image
loadingImageView.init(R.drawable.init);
initはしてもしなくてもよいです。 ロード前の画像を設定したい場合のみ使います。
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="wrap_content"
android:layout_height="wrap_content"
>
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="load image"
/>
<com.sample.android.LoadingImageView.LoadingImageView
android:id="@+id/loadingImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
String imageUrl = "http:// ~~~.jpg";
loadingImageView.loadImage(imageUrl);
loadImage()にURLアドレスを渡すと画像を取得します。取得完了したら、画像表示してプログレスバーを非表示にします。
2011年11月7日月曜日
日本Androidの会 中国支部 第23回勉強会に行ってきた
当日はあいにくの雨。
内容は、ICS と デザイン。
ICSはさまざまなニュース、記事が出ているので、割愛。
デザインは第1回ということで、色について基本的なところをお勉強。
ベース、メイン、アクセントの3つに分けましょう。が印象に。
今まで、
fragment からも デザインからも逃げてきたので、
そろそろ立ち向かわなければと感じた一日でした。
以上。
PS.
とても充実した内容だったのですが、
すべて書ききれないので、あえて簡素にしてみました。
どんな内容だったかは
cactusさんがまとめてるので、そちらを参照くださいませ。
http://ktake20jp.blogspot.com/2011/11/android-23.html
http://ktake20jp.blogspot.com/2011/11/android-23_06.html
幅480の画像を540x960に表示させる方法
<ImageView
android:width="480px
android:height="60px"
・・・・
としていたために起こった問題。
この状態で540x960に表示させると、画像が画面いっぱいに広がってくれないのです。
(当然ですが)
そこで、こんな感じにするときれいに幅いっぱいに表示されます。
<ImageView
android:layout_width="fill_parent"
android:layout_height="60px"
android:scaleType="centerCrop"
/>
heightをwrap_contentにすると、画像の上下に余白ができてしまったので、
縦は固定サイズにしないとダメみたいです。
というメモ。
Androidでフリック。に勝手に補足
できそうになかったので勝手に補足してしまいます。
「Android でフリック」
http://gpsoft.dip.jp/hiki/?Android%A4%C7%A5%D5%A5%EA%A5%C3%A5%AF
画面いっぱいにフリックビューだけを表示させるのなら問題なかったのですが、
今回、下のような感じでフリックビューを表示させようとしたら、コンパイルエラーが出たので、勝手に補足。
===============
ヘッダー
===============
Google使いこなしアレコレ
タイトルで言うほど使いこなしてるのかは微妙。
2011年10月14日金曜日
テザリングとパケット制限
秋モデルでは各社さんともテザリング対応のスマートフォン出てきましたね。
auも10月からパケット制限が始まりました。
日中はISW11Tでテザリングしてるので、パケット制限に引っ掛かっている模様です。
パケット制限中の動作について、
感じたことを書いていきたいと思います。
まずはブラウザの閲覧。
⇒問題なし。
メールの送受信、ツイッターの閲覧など特に遅延など感じませんでした。
動画の閲覧
⇒問題あり。
Youtube、ustream、Gyaoともにバッファリングが間に合わなくて、
頻繁に途切れます。
auの場合、3日で300万パケット以上で制限されます。
テザリングしてるとすぐに越えてしまいますね。
300万パケット越えたら、すぐに遅くなる訳ではないようです。
当日含めず、直近3日なので、
1日で上限越えた場合。翌日から3日間制限される訳です。
そうは言っても、どれだけパケット使ってるか分からない。という方にお勧めアプリをご紹介します。
「auお客様サポート」アプリ
サポートIDを設定してログインすると、パケット利用量の概算見ることができます。
直近3日間のパケット総計や日毎のパケットなど。
「ZDbox」アプリ
設定切替、タスク管理、キャッシュ整理などとても便利なアプリです。
機能の中に通信量情報という機能があり、パケット量の当月、当日、総計を確認できます。
このアプリのすごいところはアプリごとの通信量を確認できる点。
おすすめです。
ここからは、
3Gパケットを使わないようにするためのお勧めアプリをご紹介します。
「au Wi-Fi接続ツール」アプリ
au Wi-Fi SPOTに自動で接続してくれるアプリです。
出来るだけ3G使わないようにして、
テザリング使っても制限かからないようにする目的で普段から設定しておくといいかも。外出時や街中で有効です。
Wi-Fi SPOT接続中にテザリングすると、Wi-Fiが切断されて3Gに切り替わるので、注意です。
アプリではないですが、
WiMAX対応機種はWiMAX使うのがベストですね。
WiMAXは制限の対象外です。
うちの場合はWi-Fiより速度早かったという測定結果も。。
ただし、エリア内で窓際でないと厳しいですが。
おしまい
追記
内容が主観的ですね。
制限中の測定結果のせたりすれば、よかったかも。

