java - 如何在 sharedPrefs 中保存视图位置..?
问题描述
我想在触摸的任何位置移动屏幕上的视图。我写了一些代码,视图正在移动,但我无法在保存按钮上的 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);
}
在这种情况下,当移动视图并保存值......然后转到其他活动并检查视图位置......然后我得到那个视图是不可见的。
.....对不起,我的英语不好....
解决方案
有两个花车X
并将Y
它们保存在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):
推荐阅读
- java - 在 API 端点收到 Hibernate @OneToMany Set 时会丢失订单
- python - DjangoRestFramework - 如何使用“pk”过滤列表?
- c# - ThenInclude 语句中某个属性的输出 (EFCore)
- docker - 当我用 docker 构建容器时,我看不到我的 html
- kotlin - 如果在未设置任何内容的情况下局部变量获取默认值,为什么必须初始化获取变量“xxx”?
- oracle-nosql - Oracle NoSQL 数据库中的自增主键
- excel - 搜索具有两个匹配值的行不存在
- django - 从 Django 后端向 Flutter 应用程序发送通知
- python - 如何合并具有相似索引熊猫的行
- sql - Postgresql 获取列出所有拥有 3 条或更多记录交易的客户