自定义滑动解锁
Posted
技术标签:
【中文标题】自定义滑动解锁【英文标题】:Custom Slide to unlock 【发布时间】:2013-11-08 01:33:45 【问题描述】:您好,我正在尝试开发一个自定义锁定屏幕,我想用 ImageView 替换幻灯片以解锁,如图所示。
这是我迄今为止尝试过的。
我已经在屏幕的左下角放置了一个Image,并使用onTouchListner将Image水平拖到下面的代码中。
left_Locker.setOnTouchListener(new OnTouchListener()
public boolean onTouch(View v, MotionEvent event)
int eid = event.getAction();
switch (eid)
case MotionEvent.ACTION_DOWN:
toastText.setVisibility(View.VISIBLE);
toastText.setTextColor(Color.BLACK);
toastText.setText("Slide to Unlock");
break;
case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams mParams = (RelativeLayout.LayoutParams) left_Locker.getLayoutParams();
int x = (int) event.getRawX();
mParams.leftMargin = x - 50;
left_Locker.setLayoutParams(mParams);
break;
case MotionEvent.ACTION_UP:
toastText.setVisibility(View.GONE);
break;
default:
break;
return true;
);
图像确实水平移动,但我正在寻找的是让图像背景也可以拖动,如上图所示。我使用 ImageView 是否走在正确的轨道上??
下面是我尝试过的图片。
我可以水平移动图像,但是如何在滚动时获取背景??
【问题讨论】:
请发表评论。为什么它被低估了..据我所知,这是一个有效的编程问题 嘿伙计,我正在寻找一模一样的。你能帮助我吗?你有解决方案吗?我从过去 3 天开始通过 diff diff 方式为此徘徊,但没有得到正确的方法或解决方案。你是怎么做到的,你能帮帮我吗? @Yog Guru 我也在寻找解决方案。如果你找到了请回答这个帖子谢谢 【参考方案1】:我对你的代码做了一些修改,我实现了。
以下是将屏幕末端的图像滑动到两侧的代码(Left & Right
)。
为此,您必须在要滑动的两侧使用9patch 图像。
public class MainActivity extends Activity implements OnTouchListener
ImageView left,right;
int leftPosition,rightPosition;
boolean getSize = false;
int width;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
left = (ImageView)findViewById(R.id.left);
right = (ImageView)findViewById(R.id.right);
leftPosition = left.getRight();
rightPosition = right.getLeft();
width = getWindowManager().getDefaultDisplay().getWidth();
left.setOnTouchListener(new OnTouchListener()
public boolean onTouch(View v, MotionEvent event)
int eid = event.getAction();
switch (eid)
case MotionEvent.ACTION_DOWN:
/* toastText.setVisibility(View.VISIBLE);
toastText.setTextColor(Color.BLACK);
toastText.setText("Slide to Unlock");*/
if(!getSize)
leftPosition = left.getRight();
rightPosition = right.getLeft();
getSize =true;
break;
case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams mParams = (RelativeLayout.LayoutParams) left.getLayoutParams();
int x = (int) event.getRawX();
if (x>leftPosition)
mParams.width = x;
left.setLayoutParams(mParams);
break;
case MotionEvent.ACTION_UP:
RelativeLayout.LayoutParams mParam = (RelativeLayout.LayoutParams) left.getLayoutParams();
mParam.width = leftPosition;
left.setLayoutParams(mParam);
break;
default:
break;
return true;
);
right.setOnTouchListener(new OnTouchListener()
public boolean onTouch(View v, MotionEvent event)
int eid = event.getAction();
switch (eid)
case MotionEvent.ACTION_DOWN:
/* toastText.setVisibility(View.VISIBLE);
toastText.setTextColor(Color.BLACK);
toastText.setText("Slide to Unlock");*/
break;
case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams mParams = (RelativeLayout.LayoutParams) right.getLayoutParams();
int x = (int) event.getRawX();
if (x<rightPosition)
mParams.width = width-x;
right.setLayoutParams(mParams);
break;
case MotionEvent.ACTION_UP:
//toastText.setVisibility(View.GONE);
RelativeLayout.LayoutParams mParam = (RelativeLayout.LayoutParams) right.getLayoutParams();
mParam.width = width - rightPosition;
right.setLayoutParams(mParam);
break;
default:
break;
return true;
);
@Override
public boolean onTouch(View v, MotionEvent event)
// TODO Auto-generated method stub
return false;
【讨论】:
@contactmeandroid 你试过这个吗?对你有用吗?【参考方案2】:我认为你应该尝试类似this。
或
还有另一种解决方法。使用相对布局设置搜索栏下方的背景图片,使其进度条透明,图片为拇指。
接下来根据搜索栏进度设置图片宽度
或 可能还有另一种解决方案,您可以在您的 imageview 上使用 ontouchlistener 并仅更改 x 并且每次都保持 y 不变并像上面的方法一样更改背景。
【讨论】:
如果用户点击progressDrawable,拇指会移动。如何限制它。我希望只使用拇指移动搜索栏 尝试在 onprogresschange 和 onstarttracking 中设置一个条件,将进度设置为零,除非初始进度小于 10。以上是关于自定义滑动解锁的主要内容,如果未能解决你的问题,请参考以下文章