Пользовательский слайд для разблокировки

Привет, я пытаюсь разработать собственный экран блокировки, в котором я хочу заменить слайд для разблокировки на ImageView, как показано на рисунке.

введите здесь описание изображения

Это то, что я пробовал до сих пор.

Я поместил изображение в левый угол экрана и использовал onTouchListner, чтобы перетащить изображение по горизонтали. Код ниже.

left_Locker.setOnTouchListener(new OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                int eid = event.getAction();
                switch (eid) {
                case MotionEvent.ACTION_DOWN:
                    toastText.setVisibility(View.VISIBLE);
                    toastText.setTextColor(Color.BLACK);
                    toastText.setText("Slide to Unlock");
                    break;
                case MotionEvent.ACTION_MOVE:
                    RelativeLayout.LayoutParams mParams = (RelativeLayout.LayoutParams) left_Locker.getLayoutParams();
                    int x = (int) event.getRawX();
                    mParams.leftMargin = x - 50;
                    left_Locker.setLayoutParams(mParams);
                    break;
                case MotionEvent.ACTION_UP:
                        toastText.setVisibility(View.GONE);
                        break;
                default:
                    break;
                }
                return true;
            }
        });

Изображение перемещается по горизонтали, но я ищу, чтобы фон изображения также перетаскивался, как показано на рисунке выше. Я на правильном пути, используя ImageView ??

Ниже приведено изображение того, что я пробовал.

введите здесь описание изображения

Я могу перемещать изображение по горизонтали, но как получить фон при прокрутке ??


person Srikanth Pai    schedule 29.10.2013    source источник
comment
Пожалуйста, оставьте комментарий. почему за него проголосовали... насколько я понимаю, это правильный вопрос программирования   -  person Srikanth Pai    schedule 29.10.2013
comment
Эй, чувак, я ищу точно такое же, как и то же самое. можете вы помочь мне? у вас есть решение для этого? Я блуждаю по этому поводу с последних 3 дней разными способами, но не нахожу правильного пути или решения. как вы это делаете вы можете мне помочь?   -  person Yog Guru    schedule 23.12.2013
comment
@Yog Guru Я также все еще ищу решение для этого .. Пожалуйста, ответьте в этой теме, если найдете его. Спасибо.   -  person Srikanth Pai    schedule 26.12.2013


Ответы (2)


Я делаю некоторые изменения в вашем коде, и я достиг.

Ниже приведен код для перемещения изображения в конце экрана в обе стороны (Left & Right).

Для этого вам нужно использовать изображение 9patch для обеих сторон, которые вы хотите скользить.

public class MainActivity extends Activity implements OnTouchListener {

ImageView left,right;
int leftPosition,rightPosition;
boolean getSize = false;
int width;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    left = (ImageView)findViewById(R.id.left);
    right = (ImageView)findViewById(R.id.right);

    leftPosition = left.getRight();
    rightPosition = right.getLeft();

    width = getWindowManager().getDefaultDisplay().getWidth();

    left.setOnTouchListener(new OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {
            int eid = event.getAction();
            switch (eid) {
            case MotionEvent.ACTION_DOWN:
               /* toastText.setVisibility(View.VISIBLE);
                toastText.setTextColor(Color.BLACK);
                toastText.setText("Slide to Unlock");*/

                if(!getSize)
                {
                    leftPosition = left.getRight();
                    rightPosition = right.getLeft();
                    getSize =true;
                }
                break;

            case MotionEvent.ACTION_MOVE:

                RelativeLayout.LayoutParams mParams = (RelativeLayout.LayoutParams) left.getLayoutParams();
                int x = (int) event.getRawX();

                if (x>leftPosition) 
                    mParams.width = x;
                left.setLayoutParams(mParams);
                break;

            case MotionEvent.ACTION_UP:

                RelativeLayout.LayoutParams mParam = (RelativeLayout.LayoutParams) left.getLayoutParams();
                mParam.width = leftPosition;
                left.setLayoutParams(mParam);
                break;

            default:
                break;
            }
            return true;
        }
    });


    right.setOnTouchListener(new OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {
            int eid = event.getAction();
            switch (eid) {
            case MotionEvent.ACTION_DOWN:
               /* toastText.setVisibility(View.VISIBLE);
                toastText.setTextColor(Color.BLACK);
                toastText.setText("Slide to Unlock");*/
                break;

            case MotionEvent.ACTION_MOVE:

                RelativeLayout.LayoutParams mParams = (RelativeLayout.LayoutParams) right.getLayoutParams();
                int x = (int) event.getRawX();

                if (x<rightPosition) 
                    mParams.width = width-x;
                right.setLayoutParams(mParams);
                break;

            case MotionEvent.ACTION_UP:
                    //toastText.setVisibility(View.GONE);
                RelativeLayout.LayoutParams mParam = (RelativeLayout.LayoutParams) right.getLayoutParams();
                mParam.width = width - rightPosition;
                right.setLayoutParams(mParam);
                break;
            default:
                break;
            }
            return true;
        }
    });
}
@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    return false;
}   }
person Yog Guru    schedule 26.12.2013
comment
@contactmeandroid вы пробовали это? это будет полезно для вас? - person Yog Guru; 26.12.2013

я думаю, вам следует попробовать что-то вроде это.

OR

есть другой способ обойти это. используйте относительную компоновку, чтобы установить фоновое изображение под панелью поиска и сделать его полосу выполнения прозрачной, а изображение - большим пальцем.

затем установите ширину изображения пропорционально прогрессу панели поиска

ИЛИ может быть другое решение, вы можете использовать онтоучлистенер в своем изображении и изменять только x и оставлять y одинаковым каждый раз и менять фон, как описано выше.

person Mayank    schedule 29.10.2013
comment
если пользователь нажимает на progressDrawable, большой палец перемещается. как его ограничить. Я хочу, чтобы панель поиска перемещалась только с помощью большого пальца - person Srikanth Pai; 29.10.2013
comment
попробуйте поставить условие в onprogresschange и onstarttracking, чтобы установить прогресс равным нулю, если только начальный прогресс не меньше, чем, скажем, 10. - person Mayank; 29.10.2013