AndroidStudioでパズドラのパズル部分を作ってみようと思っています。
MainActivity.javaで、パズドラで言うところのドロップを掴んで移動させる部分のコードを書いてみたのですが、ビルドしてエミュレータで確認しようとしたところアプリが一瞬で閉じてしまいます。
xmlのみ記入し、Javaコードを一旦削除して実行すると背景などが表示されるためJavaコードが問題ではないかと思うのですが調べても原因がわかりません。
発生している問題・エラーメッセージ
ビルドのところには、Build:finishedとチェックマークもついています。 エミュレータではアプリが閉じた後、My application keeps stopping と表示されます。
該当のソースコード
Java
1package http://--; 2import java.util.Random; 3 4import androidx.annotation.RequiresApi; 5import http://androidx.appcompat.app.AppCompatActivity; 6import androidx.core.content.ContextCompat; 7 8import http://android.os.Build; 9import android.os.Bundle; 10import android.view.DragEvent; 11import android.view.MotionEvent; 12import android.view.View; 13import android.widget.GridLayout; 14/* View.OnLongClickListenerの実装 */ 15public class MainActivity extends AppCompatActivity implements View.OnDragListener, MainActivity2 { 16 17 /* 画面起動前のViewの初期化処理などを行うメソッド */ 18 19@Override 20 21 protected void onCreate(Bundle savedInstanceState) { 22 super.onCreate(savedInstanceState); 23 setContentView(R.layout.activity_main); 24 25 GridLayout parent = findViewById(http://R.id.grid_layout); 26 for (int i = 0; i < parent.getChildCount(); i++) { 27 View v = parent.getChildAt(i); 28 v.setOnTouchListener((View.OnTouchListener) this); 29 v.setOnDragListener((View.OnDragListener) this); 30 } 31 } 32 33 private View mDragView; 34 35 36@RequiresApi (api = Build.VERSION_CODES.N) 37 38@Override 39 public boolean onTouch(View v, MotionEvent motionEvent) { 40 // 押下時に動作 41 if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 42 mDragView = v; 43 44 // Viewをドラッグ状態にする。 45 v.startDragAndDrop(null, new View.DragShadowBuilder(v), v, 0); 46 v.setAlpha(0); 47 } 48 return true; 49 } 50 51 52@RequiresApi 53(api = Build.VERSION_CODES.P) 54 55@Override 56 public boolean onDrag(View v, DragEvent event) { 57 switch (event.getAction()) { 58 59 case DragEvent.ACTION_DRAG_ENDED: 60 getMainExecutor() .execute(() -> mDragView.setAlpha(1)); 61 break; 62 63 // 位置を入れ替える 64 case DragEvent.ACTION_DRAG_LOCATION: 65 getMainExecutor().execute(() -> swap(v, mDragView)); 66 break; 67 } 68 return true; 69 } 70 71 private void swap(View v1, View v2) { 72 73 if (v1 == v2) return; 74 75 GridLayout parent = findViewById(http://R.id.grid_layout); 76 77 GridLayout.LayoutParams p1, p2; 78 p1 = (GridLayout.LayoutParams) v1.getLayoutParams(); 79 p2 = (GridLayout.LayoutParams) v2.getLayoutParams(); 80 parent.removeView(v1); 81 parent.removeView(v2); 82 parent.addView(v1, p2); 83 parent.addView(v2, p1); 84 } 85 86}
試したこと
JavaSilverの勉強はしたのですが、アンドロイドスタジオの使い方がまだ完全には理解できていないので、ここまでほとんど調べながら書きました。
キャッシュの無効化もしましたが変化はありませんでした。
補足情報(FW/ツールのバージョンなど)
Android studio 4.2.2 API30
java
あなたの回答
tips
プレビュー