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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

1回答

489閲覧

Android Studio)削るスクラッチくじのnextボタン

navesanta

総合スコア198

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/09/30 07:44

編集2017/10/02 10:04

削るスクラッチくじを使ったアプリを試しに作っているのですが削った後、元に戻す方法が分からないので分かる方教えて下さい。

やったこと)
1)削るアクションが起こせるScratchView.javaを作成
2)activity_main.xml内にRelativeLayoutを使って重ねるようにして
前面に1)で作成したScratchViewを指定、後面にTextViewを設置
3)MainActivity.javaにnextボタンでsetOnClickListenerを設置

やりたいこと)
テストRunして画面上でまず削って文字を出します。(ここまでは出来ています)
次にnextボタンを押すと削る前に戻って、削る→nextボタンで戻る→nextボタンで戻る
とできるようにしたいのですがsetOnClickListener内の設定が何を利用したら
良いか分かりません。分かる方、もしくはヒントになりそうなことが分かる方みえましたら教えて下さい。

環境 os mac
開発環境 Android studio 2.2.3

MainActivity.java

public class MainActivity extends AppCompatActivity { private TextView lotText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button nextButton = (Button)findViewById(R.id.nextButton); lotText = (TextView)findViewById(R.id.lottery_result); nextButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { lotText.setText("削った時に表示される文字"); ☆ここから↓メソッドを追加しました。 graffitiView.resetDraw();          } }); } }

activity_main.xml内

<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.widget.Space android:layout_weight="10" android:layout_width="wrap_content" android:layout_height="0dp" /> <TextView android:id="@+id/lottery_result" android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="30sp" android:text="テストです"/> <android.support.v4.widget.Space android:layout_weight="10" android:layout_width="wrap_content" android:layout_height="0dp" /> </LinearLayout> <com.○○○.scratchmakerapp.ScratchView android:id="@+id/view1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>

ScratchView.java

public class ScratchView extends View implements View.OnTouchListener { private Bitmap mWallBitmap; // 塗りたくったビットマップ private Canvas mWallCanvas; // 元になるキャンバス public ScratchView(Context context) { super(context); // タッチリスナーをセットする this.setOnTouchListener(this); } public ScratchView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // タッチリスナーをセットする this.setOnTouchListener(this); } public ScratchView(Context context, AttributeSet attrs) { super(context, attrs); // タッチリスナーをセットする this.setOnTouchListener(this); } // * ビューサイズが変更された @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { // Bitmapを新しく作る this.mWallBitmap = null; this.mWallBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); // キャンバスを新しく作る this.mWallCanvas = null; this.mWallCanvas = new Canvas(this.mWallBitmap); // アルファで抜いていく画像を適当な透明度で初期化 this.mWallCanvas.drawColor(0xf9c0c0c0); //ここで色を決める super.onSizeChanged(w, h, oldw, oldh); } // * 描画通知 @Override protected void onDraw(Canvas canvas) { // 落書き用Bitmapに書かれた内容を表へ転送 canvas.drawBitmap(this.mWallBitmap, 0, 0, null); super.onDraw(canvas); } private Path mPath = new Path(); //タッチされた時の処理 public boolean onTouch(View v, MotionEvent event) { // タッチされた座標を取り出す float x = event.getX(); float y = event.getY(); // アクションを取り出し switch (event.getAction()) { // タッチ開始 case MotionEvent.ACTION_DOWN: // パスをリセットしてから新しい座標をセット this.mPath.reset(); this.mPath.moveTo(x, y); // ここまでの状態でパスに沿って線を書く。 // 最初だから○が描かれるだけ this.drawPath(this.mWallCanvas, this.mPath); // 再描画通知 this.invalidate(); return true; // ←trueを返さないとACTION_UPがやってこない // タッチ終了 case MotionEvent.ACTION_UP: // ここまでのパスをセット this.mPath.lineTo(x, y); // パスに沿って線を描く this.drawPath(this.mWallCanvas, this.mPath); // 線で繋がれた範囲のバウンディングボックスの計算 RectF bounds = new RectF(); this.mPath.computeBounds(bounds, true); // 線の太さ分外側に押し出す bounds.left -= 30; bounds.right += 30; bounds.top -= 30; bounds.bottom += 30; // バンディングボックスを描く this.drawBox(this.mWallCanvas, bounds); // 再描画通知 this.invalidate(); break; // タッチしたまま指が動かされた case MotionEvent.ACTION_MOVE: // パスをセットする this.mPath.lineTo(x, y); // ここまでの状態を書き込む this.drawPath(this.mWallCanvas, this.mPath); // 再描画通知 this.invalidate(); break; } return false; } //BOXを描く private void drawBox(Canvas canvas, RectF r) { // 描画設定 Paint paint = new Paint(); paint.setDither(true); paint.setAntiAlias(true); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC)); paint.setColor(0xffff0000); // 線を描く paint.setStyle(Paint.Style.STROKE); // 矩形の指定に従って描き込む canvas.drawRect(r, paint); } //パスに沿って線を書く private void drawPath(Canvas canvas, Path path) { // 線を書くためのペイント Paint paint = new Paint(); paint.setDither(true); paint.setAntiAlias(true); // これをすると塗りつぶす方の色が優先される // 背景のアルファを無視して下のレイアウトが見えるようになる paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC)); paint.setColor(Color.argb(0, 0x00, 0, 0)); // 線を引く設定(角をどうするかとか) paint.setStyle(Paint.Style.STROKE); paint.setStrokeCap(Paint.Cap.ROUND); paint.setStrokeJoin(Paint.Join.ROUND); // 太めに paint.setStrokeWidth(60); canvas.drawPath(path, paint); } //メソッドを追加 public void resetDraw(){ mWallBitmap = null; mWallBitmap = Bitmap.createBitmap(1000,1000, Bitmap.Config.ARGB_8888); mWallCanvas = null; mWallCanvas = new Canvas(mWallBitmap); mWallCanvas.drawColor(0xf9c0c0c0); } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

初期状態に戻したいということですね?
それならonSizeChanged内で行なっている、初期化処理をメソッド化してonClickで呼び出すと良いですね。

投稿2017/09/30 13:30

yona

総合スコア18155

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

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

navesanta

2017/10/01 06:07

初期化処理をMainActivity内に入れてみました。テストrunして、画面を削って、nextボタンを押してみましたがまったく反応しません。どこが悪いでしょうか?
yona

2017/10/01 10:17

メソッド化してください。
navesanta

2017/10/02 10:05

ScratchViewにメソッドを追加してonClickで呼び出すようにしました。しかしうまく挙動しません。よろしくお願いします。
yona

2017/10/02 10:33

はい、次は初期化処理の後に再描画リクエストを出します。View#invalidateを呼び出してください。
navesanta

2017/10/02 20:50

うまくいきました。ありがとうございました。これからもよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問