Android恢复搜索栏返回原始位置(从右到左)



我正在尝试使用android seekbar实现Locker应用程序和滑动解锁功能。

我想要的是,从右向左滑动解锁,如果用户从抽屉中释放触摸,它应该会回到布局的右侧。

使用以下代码,我可以实现相同的效果,但对于从左到右的方向,我想在相反的方向上也这样做,即从右到左。

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 Progress<70,则图标/可绘制内容返回到原始位置,即左角。

所以,我的问题很简单,我如何使用上面的代码从右到左滑动解锁来实现相同的功能。

我试着用下面的代码来实现这一点,它确实向我右侧显示了可绘制的图标,但当我尝试从右向左滑动时,它的功能并不像预期的那样。

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中。(它对我起了作用)

android:layoutDirection="rtl"
android:mirrorForRtl="true"

在Kotlin:

检查包含";ar";

 when {
      Locale.getDefault().language == "ar" -> {             
          clSeekbar.scaleX = -1                
      }
              

最新更新