How to make slide to unlock button in android

前端 未结 11 522
心在旅途
心在旅途 2020-12-23 18:05

Hi I want a button that should work as \'slide to unlock\' button of IOS

in short I want a button that has no click effect but can slide left to right while drag and

相关标签:
11条回答
  • 2020-12-23 18:31

    There are some good libraries to do the trick for you. If using a library to perform this is not an issue for you, then consider trying this one:

    https://github.com/cortinico/slidetoact

    Happy coding..!! :)

    0 讨论(0)
  • 2020-12-23 18:33

    You can use this library to quickly and easy customize your unlock.

    https://github.com/cheekiat/SlideToUnlock

    Use this code on xml

     <cheekiat.slideview.SlideView
            android:id="@+id/slide_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:slideBackground="@drawable/orangesquarebutton"
            app:slideSrc="@drawable/slide_image"
            app:slideText="Slide to unlock"
            app:slideTextColor="#ffffff"
            app:slideTextSize="10dp" />
    

    Slide to unlock screenshort

    0 讨论(0)
  • 2020-12-23 18:34

    Android provides the Switch widget that is similar to slide to unlock. However, you will have to customize it a little, e.g. disable change on click.

    0 讨论(0)
  • 2020-12-23 18:38

    First of all I'd like to thank @matthias for his answer. I have used the following seek bar with some customization:

     <SeekBar
            android:id="@+id/myseek"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:clickable="false"
            android:max="100"
            android:progressDrawable="@android:color/transparent"
            android:thumb="@drawable/ic_launcher" />
    

    and in java code

    sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
    
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
    
                if (seekBar.getProgress() > 95) {
    
                } else {
    
                    seekBar.setThumb(getResources().getDrawable(R.drawable.ic_launcher));
                }
    
            }
    
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
    
    
            }
    
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress,
                    boolean fromUser) {
                if(progress>95){
                    seekBar.setThumb(getResources().getDrawable(R.drawable.load_img1));
                }
    
            }
        });
    
    0 讨论(0)
  • 2020-12-23 18:40

    I Hope below Ans is work,

        public class UnlockSliderView extends FrameLayout {
        @BindView(R2.id.tv_unlock_slider)
        TextView tvUnlockSlider;
    
        @BindView(R2.id.iv_circle_slide)
        ImageView ivCircleSlide;
    
        private View parentCircle;
    
        private float xOrigin = 0;
        private float xOriginCircle = 0;
        private boolean circleTouched = false;
    
        public UnlockSliderView(Context context) {
            super(context);
            init();
        }
    
        public UnlockSliderView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init();
        }
    
        public UnlockSliderView(Context context, AttributeSet attr, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            init();
        }
    
        private void init() {
            inflate(getContext(), R.layout.layout_unlock_slider_view, this);
            ButterKnife.bind(this);
    
            parentCircle = (View) ivCircleSlide.getParent();
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                eventActionDown(event);
            } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
                eventActionMove(event);
            } else if (event.getAction() == MotionEvent.ACTION_UP) {
                unlockFinish();
            }
            return true;
        }
    
        private void eventActionDown(MotionEvent event) {
            if ((event.getX() >= ivCircleSlide.getX() && event.getX() <= ivCircleSlide.getX() + ivCircleSlide.getWidth())
                    && (event.getY() >= ivCircleSlide.getY() && event.getY() <= ivCircleSlide.getY() + ivCircleSlide.getHeight())) {
                xOrigin = event.getX();
                xOriginCircle = ivCircleSlide.getX();
                circleTouched = true;
            } else {
                circleTouched = false;
            }
        }
    
        private void eventActionMove(MotionEvent event) {
            if (circleTouched) {
                float newXCircle = xOriginCircle + (event.getX() - xOrigin);
                newXCircle = (newXCircle < xOriginCircle) ? xOriginCircle : newXCircle;
                newXCircle = (newXCircle > parentCircle.getWidth() - ivCircleSlide.getWidth() - xOriginCircle) ? parentCircle.getWidth() - ivCircleSlide.getWidth() - xOriginCircle : newXCircle;
                float alpha = 1 - ((newXCircle - xOriginCircle) / (parentCircle.getWidth() - ivCircleSlide.getWidth() - (xOriginCircle * 2)));
                tvUnlockSlider.setAlpha(alpha);
                ivCircleSlide.setX(newXCircle);
                if (newXCircle == parentCircle.getWidth() - ivCircleSlide.getWidth() - xOriginCircle) {
                    unlockFinish();
                    if (mListener != null) mListener.onUnlock();
                }
            }
        }
    
        private void unlockFinish() {
            if (circleTouched) {
                ivCircleSlide.animate().x(xOriginCircle).setDuration(400).start();
                tvUnlockSlider.animate().alpha(1).setDuration(400).start();
                circleTouched = false;
            }
        }
    
    
    
    
       and the xml is,
    
      <?xml version="1.0" encoding="utf-8"?>
       <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="@dimen/unlock_slider_height"
        android:layout_margin="@dimen/default_padding"
        android:background="@drawable/btn_slider_back"
        android:gravity="center"
        android:orientation="vertical"
        android:padding="4dp">
    
        <TextView
            android:id="@+id/tv_unlock_slider"
            style="@style/prelogin_slider"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginLeft="@dimen/unlock_slider_handle_size"
            android:layout_marginStart="@dimen/unlock_slider_handle_size"
            android:text="@string/logon_to_mobile_banking" />
    
        <ImageView
    
            android:id="@+id/iv_circle_slide"
            android:layout_width="@dimen/unlock_slider_handle_size"
            android:layout_height="@dimen/unlock_slider_handle_size"
            android:scaleType="fitCenter"
            android:src="@drawable/btn_slider_handle"
            tools:ignore="ContentDescription" />
    
    </FrameLayout>
    
    0 讨论(0)
提交回复
热议问题