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

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

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

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

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

2210閲覧

Androidでの画像スクロールについて

shin1977

総合スコア14

Java

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

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/01/29 13:43

Android初心者です。
よろしくお願いいたします。
将来的にスクロール画面を作ろうとしています。
まずは画像をスムーズに(1ピクセル毎)スライドさせるプログラムを仮に
作ってみました。
2000px✖1000pxの画像を読み込んで、
500✖1000の画面にスライドさせようと思っています。

ただ色々試行錯誤しましたが、最初の画面が表示された後に、
1px毎に表示されず、一気に1500px動いた画像になってしまいます。

大変、お手数をおかけいたしますが、ご教授の程、
よろしくお願いいたします。
また、根本的に違っていることや、違うプログラムの仕方等ありましたら、
合わせてご教授頂けると助かります。

import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.widget.ImageView; public class Battle_view extends AppCompatActivity { Bitmap map_img; Bitmap map_view; Canvas canvas; Canvas canvas_v; Paint paint; ImageView aaa; Handler hdl = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_battle_view); map_img = BitmapFactory.decodeResource(getResources(), R.drawable.test); map_img = Bitmap.createScaledBitmap(map_img, 2000, 1000, false); map_view = Bitmap.createBitmap(500, 1000, Bitmap.Config.ARGB_8888); paint = new Paint(); canvas = new Canvas(map_img); canvas_v = new Canvas(map_view); canvas_v.drawBitmap(map_img, 0, 0, null); aaa = ((ImageView) findViewById(R.id.imageView)); aaa.setImageBitmap(map_view); } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); hdl.post(new m_view()); } class m_view implements Runnable { public void run() { canvas_v = new Canvas(map_view); aaa.setImageBitmap(map_view); int i = 0; while (i < 1500) { canvas_v.drawBitmap(map_img, i * -1, 0, null); i++; } } } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

while文を削除し、1pxを移動させる処理を1500回のHandler#postするようにしてください。

投稿2017/01/29 14:08

yona

総合スコア18155

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

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

shin1977

2017/01/29 14:15

早速のご回答大変ありがとうございます。 下記の様に作り直しましたが、結果は全く同じになってしまいました。 よろしくお願いいたします。 @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); x = 0; while (x < 1500) { hdl.post(new m_view()); x++; } } class m_view implements Runnable { public void run() { canvas_v.drawBitmap(map_img, x * -1, 0, null); aaa.setImageBitmap(map_view); } }
yona

2017/01/29 14:39

間違えました。 プログラムを元に戻して、while文の末尾にThread.sleep(100)を入れてください。
shin1977

2017/01/29 15:10

重ねて、ご回答ありがとうございます。 下記の文でやってみましても、結果は同じでした。 ひたすら、初期画面で止まっており、スロープ時間経過後(1500✖100ms)一気に 最後の画像(1500px移動した)が表示されるだけでした。 何度も申し訳ございませんが、よろしくお願いいたします。 class m_view implements Runnable { public void run() { canvas_v = new Canvas(map_view); aaa.setImageBitmap(map_view); int i = 0; while (i < 1500) { canvas_v.drawBitmap(map_img, i * -1, 0, null); i++; try { Thread.sleep(100); } catch (InterruptedException e) { } } } }
yona

2017/01/29 16:06

なんどもすみません。 ・Threadでスレッドを新しく作ってください。 ・スレッドのrunメソッド内で1500ループしてください。 ・ループ内でhdl.post(new m_view());を実行してください。 ・ループの末尾にThread.sleepを入れてください。
shin1977

2017/01/30 14:30

大変ありがとうございました。 頂いた内容を元に実行したところ、思い通りの動作ができました。 助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問