【问题标题】:How to save view position in sharedPrefs..?如何在 sharedPrefs 中保存视图位置..?
【发布时间】:2020-05-24 20:28:42
【问题描述】:

我想将屏幕上的视图移动到触摸的任何位置。我写了一些代码,视图正在移动,但我无法在保存按钮上的 sharedPrefs 中保存位置。所以请帮我保存我在其他活动中使用的视图位置。

我使用我在所有保存值中使用的自定义创建的 SharedPref 文件。

savebutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            SharedPref.setValue(EditView.this,"View_X",dX);
            SharedPref.setValue(EditView.this,"View_Y",dY);
        }
    });

@Override
public boolean onTouch(View view, MotionEvent event) {
    switch (event.getActionMasked()) {
        case MotionEvent.ACTION_DOWN:
            dX = view.getX() - event.getRawX();
            dY = view.getY() - event.getRawY();
            lastAction = MotionEvent.ACTION_DOWN;
            break;

        case MotionEvent.ACTION_MOVE:
            view.setY(event.getRawY() + dY);
            view.setX(event.getRawX() + dX);
            lastAction = MotionEvent.ACTION_MOVE;
            break;

        case MotionEvent.ACTION_UP:
            if (lastAction == MotionEvent.ACTION_DOWN)
                Toast.makeText(EditWatermark.this, "Clicked!", Toast.LENGTH_SHORT).show();
            break;

        default:
            return false;
    }
    return true;
}

其他活动

View view;
float savedX, savedY;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_edit);

    view = findViewById(R.id.View);
    savedX = SharedPref.getFloat(this,"View_X");
    savedY = SharedPref.getFloat(this,"View_Y");
    view.setX(savedX);
    view.setY(savedY);

}

在这种情况下,当移动视图并保存值...然后转到其他活动并检查视图位置..然后我得到该视图是不可见的。

.....对不起我的英语不好......

【问题讨论】:

  • 嗨,Akash,您可以将代码发布到您尝试保存数据的位置吗?
  • @Slipoch 问题正在更新,你可以试试..

标签: java android position sharedpreferences ontouch


【解决方案1】:

有两个浮点数XY 并将它们保存在ACTION_UP

//member variables of your class
private float X;
private float Y;


    .............
    .............
    case MotionEvent.ACTION_UP:
        if (lastAction == MotionEvent.ACTION_DOWN){
            Toast.makeText(EditWatermark.this, "Clicked!", Toast.LENGTH_SHORT).show();

        }else{
        //store the values
        X = view.getX();
        Y = view.getY();
        }
        break;
        ............
        ............

现在按钮保存点击:

save.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){

//save values to preferences

SharedPreferences.Editor editor = getSharedPreferences("view", MODE_PRIVATE).edit();
editor.putFloat("state_x", X);
editor.putFloat("state_y", Y);
editor.apply();

}

});

当你想再次查询保存的值时:

//somewhere in your code where you want to query the last saved X and Y 

//get the last stored values
SharedPreferences pref = getSharedPreferences("view", MODE_PRIVATE);
float savedX = pref.getFloat("state_x",0); //0 is default if nothing exist
float savedY = pref.getFloat("state_y",0); //0 is default if nothing exist

//set them back to the view
view.setX(savedX);
view.setY(savedY):

【讨论】:

  • 感谢您回答我.. 但我仍然对此感到困惑.. 我用我的完整情况更新问题.. 你现在可以解决它吗
  • 有什么好纠结的,跟着步骤走就行了。
  • 我按照您可以看到的步骤进行操作。但是当我在其他活动中打开时,视图是不可见的
  • 我看到了你的问题,你没有使用我确切告诉你的东西。
  • 你在保存dx和dy,和我的回答无关,请按回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
相关资源
最近更新 更多