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

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

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

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

Android

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

Q&A

解決済

2回答

977閲覧

superを使ったボタン透過クラスで画像表示

2r4h8k3m

総合スコア22

Java

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

Android

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

0グッド

0クリップ

投稿2021/09/17 19:04

編集2021/09/18 06:53

出たエラーについて

Android studioにてボタンを押した感を出す為以下のURLのsuperクラスを用いるというやり方で実装して稼働することを確認したのち、

このクラスにソース追加してボタンを押した際に出るメッセージを画像として別のImageViewに表示させる仕組みを作れないかと自分で改変してみたのですが、実機で実行は出来るのですが、このボタンを押した際に「アプリが停止しました」のエラーが出るようになってしまいました。もし原因かお分かりでしたら、よろしくお願いいたします。

Android 簡単にボタンに"押した感"を出す
https://qiita.com/hsakurai2/items/a4356bd7bf0aac26b0cd

改変した部分

・public void setPressed内のif文内に

ImageView comment_img = (ImageView) findViewById(R.id.comment_img); comment_img.setImageResource(R.drawable.image_6483441); ```の追加 ・public void setPressed内のelse文内に ```ここに言語を入力 ImageView comment_img = (ImageView) findViewById(R.id.comment_img); comment_img.setImageDrawable(null); ```の追加 ###URLから改変したコード全文

/*** 半透明になるエフェクトのボタン ***/
public class AlphaButton extends Button {
public AlphaButton(Context context) {
super(context);
}

public AlphaButton(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void setPressed(boolean pressed) { if (pressed) { this.setAlpha(0.3f); ImageView comment_img =

(ImageView) findViewById(R.id.comment_img);
comment_img.setImageResource(R.drawable.image_6483441);
} else {
this.setAlpha(1.0f);
ImageView comment_img = (ImageView) findViewById(R.id.comment_img);
comment_img.setImageDrawable(null);
}
super.setPressed(pressed);
}
}

表示させたいImageViewは、idが```comment_img```で、画像名が```image_6483441```です。 ###logcatでの表示一部 Failedと書かれている箇所でin /system/framework/oat APKの失敗だったり、 systempriv-appPhonesky:Packagecom.androidのスキャンに失敗など書かれていることはわかったのですが、いまいちこのエラーにどう関係しているか分かりませんでした。 ```ここに言語を入力 1974-09-24 04:21:49.038 374-374/? I/vold: Vold 3.0 (the awakening) firing up 1974-09-24 04:21:49.038 374-374/? V/vold: Detected support for: ext4 vfat 1974-09-24 04:21:49.058 374-379/? D/vold: e4crypt_init_user0 1974-09-24 04:21:49.058 374-379/? D/vold: e4crypt_prepare_user_storage for volume null, user 0, serial 0, flags 1 1974-09-24 04:21:49.058 374-379/? D/vold: Preparing: /data/system/users/0 1974-09-24 04:21:49.058 374-379/? D/vold: Preparing: /data/misc/profiles/cur/0 1974-09-24 04:21:49.058 374-379/? D/vold: Preparing: /data/system_de/0 1974-09-24 04:21:49.058 374-379/? D/vold: Preparing: /data/misc_de/0 1974-09-24 04:21:49.058 374-379/? D/vold: Preparing: /data/user_de/0 1974-09-24 04:21:49.058 374-379/? D/vold: e4crypt_unlock_user_key 0 serial=0 token_present=0 1974-09-24 04:21:49.058 374-379/? E/vold: Failed to chmod /data/system_ce/0: No such file or directory 1974-09-24 04:21:49.058 374-379/? E/vold: Failed to chmod /data/misc_ce/0: No such file or directory 1974-09-24 04:21:49.059 374-379/? E/vold: Failed to chmod /data/media/0: No such file or directory 1974-09-24 04:21:49.930 457-457/? I/irsc_util: Starting irsc tool 1974-09-24 04:21:49.990 457-457/? I/irsc_util: Num of entries:292 1974-09-24 04:21:49.991 457-457/? I/irsc_util: Ending irsc tool 1974-09-24 04:21:50.087 374-379/? D/VoldCryptCmdListener: cryptfs mountdefaultencrypted 1974-09-24 04:21:50.103 374-490/? I/Cryptfs: cryptfs_check_passwd 1974-09-24 04:21:50.103 374-490/? D/Cryptfs: crypt_ftr->fs_size = 22953984 1974-09-24 04:21:50.103 374-490/? I/Cryptfs: Using scrypt with keymaster for cryptfs KDF

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

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

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

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

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

jimbe

2021/09/17 19:59

> このボタンを押した際に「アプリが停止しました」のエラーが出るようになってしまいました エミューレータで動かせば logcat に原因が出てくるはずです。(実機でも環境が出来ていれば出ますが。) 何よりもまず、どこで何が起きているのかを調べることが必要です。
2r4h8k3m

2021/09/18 06:55

ありがとうございます、logcatのこと思い出し、また追記しようと思ったのですが、先に返答頂いてしまいすみません。質問の方だけ一応改変させてもらいました。アンサーもまた確認次第見させてもらえたらなと。
jimbe

2021/09/18 11:01

AndroidStudio の "Logcat" には大量のログが流れますので、最新の部分だけを見ても大抵は流れた後です。 クラス名等で絞り込みをするか、"Logcat" のあるタブの並びに "Run" があれば、そちらのほうが余計なログが無くて見易いかもしれません。
guest

回答2

0

ソース書いて頂き本当にありがとうございます。ボタン作成の際にOnClickListenerなどは聞いたことがあったのですが、setOnTouchListenerは似ているけど違うのですね、onTouchとセットで使うのかな。https://maku77.github.io/android/io/handle-touch-events.html
findViewByIdの意味しっかり分かっておらず、別のViewを受け取ったクラスでもImageView設定出来ていたような気がしていたのですが、もう一度確認してみます。とても助かりました!

投稿2021/09/19 01:04

2r4h8k3m

総合スコア22

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

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

jimbe

2021/09/19 02:52

java のプログラムは複数のクラスから成り立っており、当然各クラス間で必要なタイミングで必要なデータのやり取りをします。 そのやり方は複数あり、狭義にはメソッドのパラメータや戻り値という形ですが、広義には"XXパターン"と名前が付く形式化されたものがあります。 お時間がありましたら「オブザーバパターン」「デザインパターン」等で記事をお探しになってみては如何でしょうか。(このテのものは刻々と変化するものなので呼び名や内容が少しずつ変わってくる/いる可能性がありますが。) メソッド名が同じだからと言っていつもどこでも同じことが出来るわけではありません。どんなクラスでも同名のメソッドは作れるからです。 Aレストランチェーン店で「日替わり定食ください」と言った時と、B定食チェーン店で「日替わり定食ください」と言った時に必ず同じとは限りませんよね。それと同じです。
guest

0

ベストアンサー

qiita のコードは単体で完結するものなので成立しています。
他のビューと連携させるのであればちゃんとクラスの構造を理解して"改変"する必要があります。

findViewById メソッドは、自身の View 階層内にあるビューを返します。
つまり"Button 内"に R.id.comment_img という id のビューが無ければ ImageView comment_img は null になるでしょう。

setOnTouchListener を Button に登録することで、MotionEvent の getAction()が
押す→ MotionEvent.ACTION_DOWN
離す→ MotionEvent.ACTION_UP(MotionEvent.ACTION_CANCEL もかな?)
となってそれぞれ処理が出来たように思います。


AlphaButton.java

java

1package com.teratail.q360078; 2 3import android.content.Context; 4import android.util.AttributeSet; 5import android.widget.ImageView; 6 7import androidx.annotation.*; 8 9/*** 半透明になるエフェクトのボタン ***/ 10public class AlphaButton extends androidx.appcompat.widget.AppCompatButton { 11 public AlphaButton(@NonNull Context context) { 12 super(context); 13 } 14 15 public AlphaButton(@NonNull Context context, @Nullable AttributeSet attrs) { 16 super(context, attrs); 17 } 18 19 public AlphaButton(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { 20 super(context, attrs, defStyleAttr); 21 } 22 23 @Override 24 public void setPressed(boolean pressed) { 25 if(pressed) { 26 this.setAlpha(0.75f); 27 } else { 28 this.setAlpha(1.0f); 29 } 30 super.setPressed(pressed); 31 } 32 33 @Override 34 public boolean performClick() { 35 super.performClick(); 36 return true; 37 } 38}

MainActivity.java

java

1package com.teratail.q360078; 2 3import androidx.appcompat.app.AppCompatActivity; 4import androidx.appcompat.widget.AppCompatButton; 5 6import android.os.Bundle; 7import android.util.Log; 8import android.view.*; 9import android.widget.*; 10 11public class MainActivity extends AppCompatActivity { 12 private static final String TAG = "MainActivity"; 13 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.activity_main); 18 19 ImageView comment_img = findViewById(R.id.comment_img); 20 AlphaButton button = findViewById(R.id.button); 21 button.setOnTouchListener(new View.OnTouchListener() { 22 @Override 23 public boolean onTouch(View v, MotionEvent event) { 24 //Log.d(TAG, "event="+event); 25 switch(event.getAction()) { 26 case MotionEvent.ACTION_UP: 27 case MotionEvent.ACTION_CANCEL: //念の為 28 comment_img.setImageDrawable(null); 29 break; 30 case MotionEvent.ACTION_DOWN: 31 comment_img.setImageResource(R.drawable.image_6483441); 32 break; 33 } 34 return false; 35 } 36 }); 37 } 38}

レイアウト: activity_main.xml

xml

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 tools:context=".MainActivity"> 9 10 <ImageView 11 android:id="@+id/comment_img" 12 android:layout_width="0dp" 13 android:layout_height="100dp" 14 app:layout_constraintBottom_toTopOf="@id/button" 15 app:layout_constraintLeft_toLeftOf="parent" 16 app:layout_constraintRight_toRightOf="parent" 17 app:layout_constraintTop_toTopOf="parent" /> 18 19 <com.teratail.q360078.AlphaButton 20 android:id="@+id/button" 21 android:layout_width="wrap_content" 22 android:layout_height="wrap_content" 23 android:text="Hello World!" 24 app:layout_constraintBottom_toBottomOf="parent" 25 app:layout_constraintLeft_toLeftOf="parent" 26 app:layout_constraintRight_toRightOf="parent" 27 app:layout_constraintTop_toBottomOf="@id/comment_img" /> 28 29</androidx.constraintlayout.widget.ConstraintLayout>

投稿2021/09/17 19:46

編集2021/09/18 11:05
jimbe

総合スコア12648

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問