Android将seekbar恢复到原始位置(从右到左)
我正在尝试使用android seekbar实现Locker应用程序和滑动解锁功能 我想要的是,从右向左滑动解锁,若用户从drawable释放触摸,那个么它应该回到布局的右侧 使用下面的代码,我能够实现相同的功能,但是对于从左到右的方向,我想在相反的方向,即从右到左,实现相同的功能Android将seekbar恢复到原始位置(从右到左),android,Android,我正在尝试使用android seekbar实现Locker应用程序和滑动解锁功能 我想要的是,从右向左滑动解锁,若用户从drawable释放触摸,那个么它应该回到布局的右侧 使用下面的代码,我能够实现相同的功能,但是对于从左到右的方向,我想在相反的方向,即从右到左,实现相同的功能 import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.SeekBar;
public class SlideButton extends SeekBar {
private Drawable thumb;
private SlideButtonListener listener;
public SlideButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void setThumb(Drawable thumb) {
super.setThumb(thumb);
this.thumb = thumb;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (thumb.getBounds().contains((int) event.getX(), (int) event.getY())) {
super.onTouchEvent(event);
} else
return false;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
if (getProgress() > 70)
handleSlide();
setProgress(0);
} else
super.onTouchEvent(event);
return true;
}
private void handleSlide() {
listener.handleSlide();
}
public void setSlideButtonListener(SlideButtonListener listener) {
this.listener = listener;
}
}
interface SlideButtonListener {
public void handleSlide();
}
注意:在上面的代码中,当用户单击drawable从左向右滑动时,如果他从drawable中释放手指,seekbar进度<70,则图标/drawable将返回到原始位置,即左角
所以,我的问题很简单,如何使用上面的代码从右向左滑动解锁来实现相同的功能
我试着用下面的代码来实现这一点,它确实会在右侧显示可绘制的图标,但当我尝试从右向左滑动它时,它并没有像预期的那样工作
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.SeekBar;
public class ReversedSeekBar extends SeekBar {
private Drawable thumb;
private SlideButtonListener listener;
public ReversedSeekBar(Context context) {
super(context);
}
public ReversedSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ReversedSeekBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void setThumb(Drawable thumb) {
super.setThumb(thumb);
this.thumb = thumb;
}
@Override
protected void onDraw(Canvas canvas) {
float px = this.getWidth() / 2.0f;
float py = this.getHeight() / 2.0f;
canvas.scale(-1, 1, px, py);
//canvas.rotate(180, px, py);
super.onDraw(canvas);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (thumb.getBounds().contains((int) event.getX(), (int) event.getY())) {
super.onTouchEvent(event);
} else
return false;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
if (getProgress() > 70)
handleSlide();
setProgress(0);
} else
super.onTouchEvent(event);
return true;
}
private void handleSlide() {
listener.handleSlide();
}
public void setSlideButtonListener(SlideButtonListener listener) {
this.listener = listener;
}
}
谢谢…尝试将这两行添加到xml中。(它帮了我的忙)
尝试将这两行添加到xml中。(它帮了我的忙)
翻转/旋转幻灯片视图如何?我尝试旋转seekbar,但不起作用。我想知道为什么它不起作用,因为它与从左到右相同,但你将其旋转180度,使其从右到左,不是吗?如果你看到第二个示例,我尝试旋转画布,但它无法检测到从右到左的触摸事件,触摸事件从左到右仍然相同。翻转/旋转幻灯片视图如何?我尝试旋转seekbar,但不起作用。我想知道为什么它不起作用,因为它与从左到右相同,但你将其旋转180度,使其从右到左,不是吗?如果你看到第二个示例,我尝试旋转画布,但它不会从右到左检测触摸事件,从左到右触摸事件仍然相同。
android:layoutDirection="rtl"
android:mirrorForRtl="true"