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

标签 android

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

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

使用下面的代码,我能够实现相同但对于从左到右的方向,我想在相反的方向上做同样的事情,即从右到左。

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,那么图标/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 中。 (这对我有用)

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

关于Android 将搜索栏恢复到原始位置(从右到左),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33394485/

相关文章:

android - 是否可以在 Android 库项目中读取没有上下文引用的原始文本文件

java - 使用 Google Docs gview 在 webview 中加载 PDF

java - Android Button 在 Activity 中找不到方法

android - 加密算法在 Android 2.1 和 2.1 以上版本上给出不同的结果

android - 如何在 Android 选项卡布局中隐藏选项卡?

android - 将 Drawable 绘制为位图

android - 如何使 MvxGridView 高效且高性能?

java - 如何在android中使用recyclerView传递id而不是位置

android - Parcelable 接口(interface)的 describeContents() 的用途

android - Firestore 阻止的用户规则