diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationActivity.java index 692022a..fd13098 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/animation/AnimationActivity.java @@ -7,6 +7,8 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.util.Log; import android.view.MotionEvent; import android.view.View; @@ -22,16 +24,25 @@ import org.ntlab.acanthus_client.views.paint.PaintViewModel; import java.util.HashMap; +import java.util.Timer; +import java.util.TimerTask; // 表示ページ public class AnimationActivity extends AppCompatActivity { private AnimationCanvas animationCanvas; private AnimationViewModel animationViewModel; - private View view; + //アニメーション用の変数 private WebView webView; private HashMap pages; + private int pageNo = 0; + + //タイマー用の変数 + private Timer timer; + private CountUpTimerTask timerTask; + private Handler handler = new Handler(Looper.getMainLooper()); + private int msec = 1000; //ボタン系 private boolean buttonView = true; @@ -46,13 +57,12 @@ //animationCanvasの表示 @Override protected void onCreate(Bundle savedInstanceState) { - init(); - super.onCreate(savedInstanceState); setContentView(R.layout.activity_animation); - animationCanvas = this.findViewById(R.id.animationMyCanvas); + //animationCanvas = this.findViewById(R.id.animationMyCanvas); + init(); - //wecView + //wecView初期設定 webView = this.findViewById(R.id.animationWebview); webView .getSettings().setLoadWithOverviewMode(true); webView .getSettings().setUseWideViewPort(true); @@ -62,15 +72,14 @@ return false; } }); -// url = animationViewModel.getAnimationPage().getValue(); -// //url = "http://nitta-lab-www.is.konan-u.ac.jp/gallery/300/0/a300p0.png"; -// webView.loadUrl(url); + ////////////////////////////////////////////////////////////////////////// + //以下アニメーションボタン関連 //アニメーションの再生停止 buttonPlayback = findViewById(R.id.button_playback); buttonPlayback.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { - if(animationCanvas.onClickPlayback() == 0){ + if(onClickPlayback()){ buttonPlayback.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_baseline_play_arrow)); } else { @@ -83,7 +92,7 @@ buttonReset = findViewById(R.id.button_reset); buttonReset.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { - animationCanvas.resetAnimationPage(); + resetAnimationPage(); } }); @@ -91,7 +100,7 @@ buttonSkip = findViewById(R.id.button_skip); buttonSkip.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { - animationCanvas.setAnimationSkip(1); + setAnimationSkip(1); } }); @@ -99,7 +108,7 @@ buttonBack = findViewById(R.id.button_back); buttonBack.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { - animationCanvas.setAnimationSkip(-1); + setAnimationSkip(-1); } }); @@ -121,30 +130,6 @@ } }); } - - public void init(){ - //初期化 - Acanthus acanthus = (Acanthus) getApplication(); - animationViewModel = new ViewModelProvider(this).get(AnimationViewModel.class); - animationViewModel.init(acanthus); - startObserver(); - } - - //startobserve - private void startObserver(){ - animationViewModel.getAnimationPage().observe(this, new Observer>() { - @Override - public void onChanged(HashMap s) { - pages = animationViewModel.getAnimationPage().getValue(); - //url = "http://nitta-lab-www.is.konan-u.ac.jp/gallery/300/0/a300p0.png"; - webView.loadUrl(pages.get(1)); - Log.d("a", "onFailure: -----------------------OK:Obs"); - //animationCanvas.init(pages); - } - }); - } - - //Activity内のボタンの表示/非表示 @Override public boolean onTouchEvent(MotionEvent motionEvent) { @@ -175,4 +160,80 @@ return false; } + + //////////////////////////////////////////////////////////////////////////// + //以下アニメーション操作画面 + public void init(){ + //初期化 + Acanthus acanthus = (Acanthus) getApplication(); + animationViewModel = new ViewModelProvider(this).get(AnimationViewModel.class); + animationViewModel.init(acanthus); + startObserver(); + } + + //startobserve + private void startObserver(){ + animationViewModel.getAnimationPage().observe(this, new Observer>() { + @Override + public void onChanged(HashMap s) { + pages = animationViewModel.getAnimationPage().getValue(); + animationView(); + //animationCanvas.init(pages); + } + }); + } + + private void animationView(){ + webView.loadUrl(pages.get(pageNo+1)); + } + + //アニメーションの再生停止 + public boolean onClickPlayback(){ + if(timer != null){ + //timerの終了 + timer.cancel(); + timer = null; + return true; + } + else{ + //timerの生成 + this.timer = new Timer(); + this.timerTask = new CountUpTimerTask(); + this.timer.schedule(timerTask,0, this.msec);//スケジュールを100ms毎に設定する。 + return false; + } + } + + //ページを進める(ループ) + class CountUpTimerTask extends TimerTask { + @Override + public void run(){ + handler.post(new Runnable(){ + public void run() { + pageNo = (pageNo + 1) % pages.size(); + animationView(); + } + }); + } + } + + //最初のページに戻す。 + public void resetAnimationPage(){ + this.pageNo = 0; + animationView(); + } + + + //再生速度の変更 + public void setAnimationSpeed(float speed){ + this.msec *= speed; + } + + //2秒スキップ + public void setAnimationSkip(int x){ + this.pageNo += x * 2000 / this.msec; + if(this.pageNo < 0) this.pageNo = 0; + else if(this.pageNo >= pages.size()) this.pageNo = pages.size() - 1; + animationView(); + } } \ No newline at end of file