「test」と書いてあるTextViewを長押しすると、移動可能となるようなプログラムを作成しました。実現したいことは、そのViewを移動させた後に、画面遷移をし、再び戻ってきたときにViewの位置が保持されることです。いろいろ自分なりに調べてプログラムを書いてみたのですが上手くいきません泣
どなたか助けていただきたいです、、、
コードは膨大にあるため、該当箇所のみ抜粋して載せます。
SubActivity3java
1import ・・・ 2public class SubActivity3 extends AppCompatActivity 3 implements View.OnTouchListener { 4 private int dx; 5 private int dy; 6 private int read_x, read_y 7 private SharedPreferences prefsx, prefsy; 8 9 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.activity_sub3); 13 14 cImageView = this.findViewById(R.id.ch_textView1); 15 cImageView.setOnTouchListener(this); 16 17 prefsx = getSharedPreferences("x_zahyou", MODE_PRIVATE); 18 prefsy = getSharedPreferences("y_zahyou", MODE_PRIVATE); 19 20 read_x = prefsx.getInt("x", 0); 21 read_y = prefsy.getInt("y", 0); 22 23 cImageView.setTranslationX(read_x); 24 cImageView.setTranslationY(read_y); 25 26 27(省略) 28 29 @Override 30 public boolean onTouch(View v, MotionEvent event) { 31 // x,y 位置取得 32 int newbuttonX = (int)event.getRawX(); 33 int newbuttonY = (int)event.getRawY(); 34 35 switch (event.getAction()) { 36 // タッチダウンでdragされた 37 case MotionEvent.ACTION_MOVE: 38 // ACTION_MOVEでの位置 39 // performCheckを入れろと警告が出るので 40 v.performClick(); 41 42 x = (newbuttonX - buttonX); 43 y = (newbuttonY - buttonY); 44 45 dx = cImageView.getLeft() + x; 46 dy = cImageView.getTop() + y; 47 48 imgW = dx + cImageView.getWidth(); 49 imgH = dy + cImageView.getHeight(); 50 51 // Viewの位置を設定する 52 cImageView.layout(dx, dy, imgW, imgH); 53 break; 54 case MotionEvent.ACTION_DOWN: 55 break; 56 case MotionEvent.ACTION_UP: 57 break; 58 default: 59 break; 60 } 61 62 //編集文字列のxmlファイル書き出し 63 editor = prefsx.edit(); 64 editor.putInt("x", dx); 65 editor.apply(); 66 67 read_x = prefsx.getInt("x", 0); 68 69 //編集文字列のxmlファイル書き出し 70 editor = prefsy.edit(); 71 editor.putInt("y", dy); 72 editor.apply(); 73 74 read_y = prefsy.getInt("y", 0); 75 76 // タッチした位置を古い位置とする 77 buttonX = newbuttonX; 78 buttonY = newbuttonY; 79 80 return true; 81 } 82} 83
activitysub3xml
1<?xml version="1.0" encoding="utf-8"?> 2 3<android.support.constraint.ConstraintLayout 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:id="@+id/ConstraintLayout" 7 android:layout_width="match_parent" 8 android:layout_height="match_parent" 9 android:background="#96e6e6" 10 tools:context=".MainActivity"> 11 12 13(省略) 14 15 16 <com.example.tokoroshingo.myapplication.CustomImageView 17 android:id="@+id/ch_textView1" 18 android:layout_width="wrap_content" 19 android:layout_height="wrap_content" 20 android:layout_marginStart="16dp" 21 android:layout_marginLeft="16dp" 22 android:layout_marginTop="8dp" 23 android:text="test" 24 app:layout_constraintStart_toStartOf="parent" 25 app:layout_constraintTop_toTopOf="parent" /> 26 27</android.support.constraint.ConstraintLayout> 28
実行結果
この位置にViewがあり、これを
以下の位置にドラッグして持っていきます。(ボタンの動きは無視してください汗)
そして、returnボタンで前の画面に遷移してもう一度この画面に戻ると、2枚目の位置にViewがきて欲しいのに、ずれてしまいます(おそらく初期位置から1枚目→2枚目のView座標の差が足されているかのように見えます)
(参考資料:初期位置)
回答2件
あなたの回答
tips
プレビュー