Android Studio で タイマーを作ってみる⑤ (スワイプで円弧を描画)

スワイプで円弧の角度を変更できるように以下の処理を記載

 

①Viewの OnTouchListener の onTouch処理にて記載。

②ACTION_DOWN の位置で、円弧の外なら対象外、

 中なら対象の判定

③②の判定で、円弧の内側ならその角度で円弧を描画

 

// スワイプでタイマーの時間を変更
public class DragViewListener implements View.OnTouchListener {
// ドラッグ対象のView
private RelativeLayout dragView;
// ドラッグ中に移動量を取得するための変数
private int oldx;
private int oldy;
double nPI = Math.PI;

public DragViewListener(RelativeLayout dragView) {
this.dragView = dragView;
}

@Override
public boolean onTouch(View view, MotionEvent event) {
// 処理中は動かない
if (mode == TIMER_START || mode == TIMER_RESTART) {
return false;
}

NumberPicker np = (NumberPicker)findViewById(R.id.numberPicker);
// タッチしている位置取得
int x = (int) event.getRawX();
int y = (int) event.getRawY();
TextView tw = (TextView)findViewById(R.id.textView);

Window window = getWindow();
av.top = window.findViewById(Window.ID_ANDROID_CONTENT).getTop();;

switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
if (oldx < 0 && oldy <0) {
return false;
}

int val;

if (x == 0 && y == 0 ) {
// 中心
return false;
} else if (x == 0) {
// X軸上
if (y > 0) {
// 右
val = 15;
} else {
// 左
val = 45;
}
} else if (y == 0 ) {
// Y軸上
if (x > 0) {
// 上
val = 60;
} else {
// 下
val = 30;
}
} else {
double rad = Math.atan2(x, y );
double deg = Math.toDegrees(rad);

if (0 < deg && deg < 90 ) {
// 右下
val = (int)((90 + 90 - deg) / 6);
} else if (90 < deg && deg < 180) {
// 右上
val = (int)((180 - deg) / 6);
} else if (-90 < deg && deg < 0) {
// 左下
val = (int) ((Math.abs(deg) + 180) / 6);
} else if (-180 < deg && deg < -90) {
// 左下
val = (int) ((Math.abs(deg) + 180) / 6);
} else {
return false;
}
}

if (val > 60) {
val = 60;
} else if (val < 1) {
val = 60;
}

// 描画処理を記載
break;
case MotionEvent.ACTION_DOWN:
oldx = -1;
oldy = -1;
if // 円弧の描画の外側なら {
return false;
}

if // 円弧の描画の外側なら {
return false;
                }
break;
}

// 今回のタッチ位置を保持
oldx = x;
oldy = y;
// イベント処理完了
return true;
}
}

みたいな感じです。

 

 

Android Studio で タイマーを作ってみる③ (カウントダウンタイマーでカウントダウン)

カウントダウンタイマーを使って、進行状況の描画と、

カウントダウン終了時に電源を立ち上げる処理をかく。

※ロックの解除はできませんでした。

 

スリープモードになっていても、とりあえず音はなるようになった。

 

①電源がつかなくても画面が光る処理

 ※AndroidManifest.xmlに以下を記載

<uses-permission android:name="android.permission.WAKE_LOCK" />

<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />


②SoundPoolのLoadは実行前に準備しておく。

===========================================================================================
// カウントダウンタイマーで 進行状況を描画
public class CountDownTm extends CountDownTimer {
public CountDownTm(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}

@Override
public void onFinish() {
// スリープモードでも、画面が光る
// BackGroundからのwakelock処理
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakelock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.ON_AFTER_RELEASE, "hingeWorks");
wakelock.acquire();
wakelock.release();

// SoundPoolにLoadは前もってやっておく。
SoundPool sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
spId = sp.load(getApplicationContext(), R.raw.computer_broken,1);
sp.play(spId, 1.0F, 1.0F, 0, 0, 1.0F);

// Toastに表示
// 第3引数は、表示期間(LENGTH_SHORT、または、LENGTH_LONG)
Toast.makeText(getApplicationContext(), "おしまい", Toast.LENGTH_LONG).show();
}

@Override
public void onTick(long millisUntilFinished) {
long nowTm = new Date().getTime();
    // ここに進行状況の処理を描画
}
}
===========================================================================================

これで、時間経過はできたっぽい。

Android Studio で タイマーを作ってみる② (円弧を描画)

描画処理で、円弧を描いて時間経過をわかるようにする。

 

まずは、Viewを拡張して、 onDrawでCanvasに描画

途中は省略でこんな感じで円弧を描画できる。

 

// 円弧をViewに描画
class ArcView extends View {
public ArcView(Context context) {
super(context);
}

@Override
public void onDraw(Canvas canvas) {
//canvas.drawColor(Color.WHITE);
Paint paint = new Paint();
paint.setColor(Color.GREEN); // 円弧を緑色で描画
paint.setStrokeWidth(5);
paint.setAntiAlias(true);

float le = 200.0f;
float tp = 200.0f;
float ri = 400.0f;
float bt = 400.0f;

paint.setStyle(Paint.Style.FILL);
RectF oval = new RectF(le, tp, ri, bt);
canvas.drawArc(oval, -90, 180, true, paint);
}
}

 

これで、時間を指定して円弧を描くところができた。



Android Studio で タイマーを作ってみる①

Android Studioでアンドロイドアプリの開発。

まずは、タイマーアプリを作ってみる。

 

機能はこんな感じで、後は作りながら調整。

①1~60分までのタイマーを作る。

②数字でカウントダウンせずに、円弧が少なくなっていく感じで

③時間の設定は、スワイプ操作で

④電源が切れていても起動する。

 

※あくまでイメージです。

f:id:hingeworks:20160602220456p:plain

 

とりあえず、プロジェクトを作成して画面イメージを作成。

普段は某マイクロソフト統合開発環境を使っているので、

画面にコントロールをうまく配置できない。。。

 

出来上がったのが、真ん中にボタンと、時間設定用のNumberPicker位の

シンプルな画面。

f:id:hingeworks:20160602223517p:plain

 

今日のところはここまで。

Android Studio のセットアップ

Androidアプリを開発をするために

まずは、開発環境の構築から。

 

一度、開発環境を構築したのだけれど、アプリ開発中に環境がぶっ壊れたため、

環境を再構築。

 

1度ある事は、何度もあるので ついでに覚書を残しておこう。

 

(1) JDKをインストール

   ☟ リンクからJDKをインストール

   http://www.oracle.com/technetwork/java/javase/downloads/index.html

 

(2) Android Studioをインストール

   ☟リンクからAndroid Studioをインストール   

developer.android.com

 

(3) Android Studioの日本語化

   2.1.1だと、日本語化がうまくいない。。。

   とりあえず、英語でがんばろう。

 

 

これで、ひとまずインストールは完了