滑块按钮接受Android中的通话

Ton*_*Ton 4 android button slide

我想为来电开发我自己的接受和拒绝按钮.为了防止在将手机从口袋中取出时意外接听或拒绝来电,我想制作滑盖式按钮或类似的东西.我是,接受电话不仅仅是点击"接受"按钮.这更像是从左到右(或相反)滑动手指,让按钮随着时刻变宽.就像Android一样.

有没有办法做到这一点?任何提示?

我希望能够清楚.

Nar*_*hin 14

如何创建图像并将其向右(或向左)滑动,然后将事件发送到活动或您想要处理结果的任何视图?

为此,您可以创建一个自定义视图,该视图实现OnTouchListener:

public class ImageTouchSlider extends RelativeLayout implements View.OnTouchListener {

private Context mContext;

private ImageView mImage;   
private int mScreenWidthInPixel;
private int mScreenWidthInDp;
private float mDensity;

private int mPaddingInDp = 15;
private int mPaddingInPixel;

private int mLengthOfSlider;

public interface OnImageSliderChangedListener{
    void onChanged();
}

private OnImageSliderChangedListener mOnImageSliderChangedListener;

public ImageTouchSlider(Context context) {
    super(context);
    mContext = context;
    createView();
}

public ImageTouchSlider(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;
    createView();
}

public ImageTouchSlider(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    mContext = context;
    createView();
}

public void createView() {
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    inflater.inflate(R.layout.image_touch_slider, this, true);

    mImage = (ImageView) findViewById(R.id.slider_image);
    mImage.setOnTouchListener(this);

    WindowManager manager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
    Display display = manager.getDefaultDisplay();
    DisplayMetrics outMetrics = new DisplayMetrics ();
    display.getMetrics(outMetrics);

    mDensity  = getResources().getDisplayMetrics().density;
    float dpWidth  = outMetrics.widthPixels / mDensity;
    mScreenWidthInPixel = outMetrics.widthPixels;
    mScreenWidthInDp = (int) (mScreenWidthInPixel / mDensity);

    mLengthOfSlider = (int) (mScreenWidthInDp - mPaddingInDp*2);
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    LayoutParams layoutParams = (LayoutParams) v.getLayoutParams();
    int width = v.getWidth();
    float xPos = event.getRawX();

    switch(event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        // You can add some clicked reaction here.
        break;
    case MotionEvent.ACTION_MOVE:
        if(xPos < (mScreenWidthInPixel - width - mPaddingInDp*mDensity) && xPos > mPaddingInDp*mDensity) {
            mOnImageSliderChangedListener.onChanged();
            layoutParams.leftMargin = (int) xPos - width / 2;
            mImage.setLayoutParams(layoutParams);
        }
        break;
    case MotionEvent.ACTION_UP:
        break;
    default:
        break;
    }

    return true;
}

public void setOnImageSliderChangedListener(OnImageSliderChangedListener listener) {
    mOnImageSliderChangedListener = listener;
}

} //end of class
Run Code Online (Sandbox Code Playgroud)

image_touch_slider.xml布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ImageView
    android:id="@+id/slider"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:layout_centerVertical="true"
    android:src="@drawable/your_drawable" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

您可以修改屏幕宽度计算部分(我当前的代码不是那么干净),并.xml像这样添加此视图:

<com.your.package.path.ImageTouchSlider
      android:id="@+id/slider"
      android:layout_width="match_parent"
      android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)

在您的课程中,您可以找到以下视图:

ImageTouchSlider slider = (ImageTouchSlider) findViewById(R.id.slider);
slider.setOnImageSliderChangedListener(new ImageTouchSlider.OnImageSliderChangedListener() {

        @Override
        public void onChanged() {
            // do something what you want here.
        }

    });
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!:)

  • @NariKimShin 有什么想法可以在滑动 ImageView 时显示后面的轨迹吗? (2认同)