質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

4366閲覧

Canvasクラスをスクロール

pomupomu

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2017/01/17 13:30

編集2017/01/20 13:21

現在、androidでpublic void onDraw(Canvas canvas)でCanvasクラスを使い縦に長い画像を描画しています。
そこでスワイプで画像を上下にスクロールさせたいのですが方法がわかりません。

参考になるサイトを教えていただく形でも構いません。ご回答よろしくお願いいたします。

java

1MainActivity.java 2public class MainActivity extends AppCompatActivity { 3 4 private TestView testView; 5 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 testView = new TestView(this); 9 setContentView(testView); 10 } 11 12 @Override 13 public void onResume() { 14 super.onResume(); 15 16 17 timer = new Timer(false); 18 timer.schedule(new TimerTask() { 19 public void run() { 20 handler.post(new Runnable() { 21 public void run() { 22 // position移動 23 pos += 1; 24 testView.setPositon(pos); 25 if (pos >= 7){ 26 pos =0; 27 } 28 testView.invalidate(); 29 } 30 }); 31 } 32 },0, period); 33 }

java

1TestView.java 2@Override 3 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 4 int width = MeasureSpec.getSize(widthMeasureSpec); 5 int height = 5000; 6 setMeasuredDimension(width, height); 7}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

MyViewがCanvasでonDrawを持っているとすると
ScrollViewに追加してセットすることもできます

MyView mv = new MyView(this); ScrollView sv = new ScrollView(this); sv.addView(mv); setContentView(sv);

ただし、MyViewでonMeasure()を呼んで高さを設定しないといけませんが

~~~
このような感じでしょう
イメージ説明

以下がコードです、タイマーは不完全なのとここでは主題ではないので省いています

MainActivity.java

public class MainActivity extends AppCompatActivity { private TestView testView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); testView = new TestView(this); ScrollView scrollView = new ScrollView(this); scrollView.addView(testView); setContentView(scrollView); } }

TestView.java

public class TestView extends View { Bitmap bmp; private Paint paint = new Paint(); public TestView(Context context) { super(context); bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = 10000; setMeasuredDimension(width, height); } public void onDraw(Canvas canvas) { canvas.drawBitmap(bmp, 200, 500, paint); canvas.drawBitmap(bmp, 500, 800, paint); canvas.drawBitmap(bmp, 800, 1500, paint); } }

コピペと質問を繰り返すのはそろそろ止めて
自力で解決、自力でサイト情報を取り込めるように
基礎から勉強したほうがいいのではないでしょうか?
スクールとか、誰か分かっている人から直接教えてもらった方がいいと思います

投稿2017/01/18 07:41

編集2017/01/21 01:23
aja

総合スコア3733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pomupomu

2017/01/19 13:26

回答ありがとうございます。 ScrollViewにセットしたところエラーが出てしまいました。 addViewしようとしているビューは他のビューで使われているのでエラーが出ているようですがどうすればいいのかわかりません。 java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
aja

2017/01/19 13:36

理由が分かっているのであれば回避すればいいのは それが無理なのかどうなのか コードが無いので分かりません
pomupomu

2017/01/20 09:52

コードです。 MainActivity.java protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); testView = new TestView(this); setContentView(testView); ScrollView scrollView = new ScrollView(this); scrollView.addView(testView); setContentView(scrollView); } TestView.java @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = 5000; setMeasuredDimension(width, height); }
aja

2017/01/20 10:32

こちらにもありますが https://akira-watson.com/android/canvas-bitmap.html#scrollview setContentView(testView); が余計です TestView testView = new TestView(this); ScrollView scrollView = new ScrollView(this); // ScrollViewに追加 scrollView.addView(testView); // ScrollViewをセットする setContentView(scrollView);
pomupomu

2017/01/20 12:27

こちらが提示するべきコードが足りませんでした。 MainActivity.java public class MainActivity extends AppCompatActivity { private TestView testView; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); testView = new TestView(this);       setContentView(testView); } @Override public void onResume() { super.onResume(); timer = new Timer(false); timer.schedule(new TimerTask() { public void run() { handler.post(new Runnable() { public void run() { // position移動 pos += 1; testView.setPositon(pos); if (pos >= 7){ pos =0; } testView.invalidate(); } }); } },0, period); } } TestView.java @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = 5000; setMeasuredDimension(width, height); }
aja

2017/01/20 12:30

コードは最初の質問を編集して追加してください 私のアドバイスは試したのでしょうか?
pomupomu

2017/01/20 13:27

エラーがでました。 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.isRecycled()' on a null object reference
guest

0

Canvasの移動とViewの移動を両方考えた結果Canvasの移動をしてしたいということですね?
Canvasの移動はCanvas#translateでできます。
Canvasの移動にこだわらないのであればScrollViewを使えば簡単にできますよ。

投稿2017/01/17 14:34

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問