2016-10-22 9 views
1

Я пытаюсь изменить поведение своего браузера, чтобы сделать его более похожим на iOS-системы, где, насколько бы вы ни находились от seekbar rect в y-координатах, это замедлит ваш поиск. И когда вы вернетесь в свой поисковый барабан, он обновит масштаб вашего прогресса до того места, где вы находитесь, как таковой, когда вы касаетесь брелка, у вас есть соотношение 1/1 по сравнению с x-салфеткой/передовой панелью поиска.Android - поисковое масштабирование поисковой системы Seekbar

Я хотел бы добиться чего-то вроде этого: когда вы говорите 50 пикселей над стрелкой (в направлении y), мой коэффициент масштабирования должен быть указан 3/1: когда вы перемещаетесь на 3 пикселя в направлении оси x, Очевидно, что стрелка должна перемещать 1 пиксель, соответственно, на ваш знак оси x. В сводке, что-то вроде искажения для отслеживания музыки iPod или видеопроигрывателя (я думаю, что плеер MX для Android имеет что-то вроде того, что я ищу).

Есть ли способ сделать это?

То, что я пробовал, является переопределением seekbar.setOnTouchListener, но отсюда я понятия не имею, что я могу сделать для имитации такой вещи. Я думаю, что-то связано с seekbar.setOnSeekBarChangeListener ... Как я могу переопределить «ссылку» между обнаружением жестов и вычислением индикатора выполнения, той же полосой хода, которую я могу найти внутри метода setOnSeekBarChangeListener.OnProgressChanged? Есть ли какой-то метод, например seekbar.setScalingProgressFactor для наложения рациона 3/1 пикселя вдоль оси x в зависимости от координат y?

Надеюсь, мой вопрос достаточно ясен.

Заранее благодарен!

ответ

1

В OnTouch вашей деятельности, использование:

int x = event.getX(), y = event.getY(); 

Затем проверьте, чтобы увидеть, насколько координата у есть с помощью:

int distance = mySeekbarY - y; 
if (distance == 0) { 
    double ScalingFactor = 1; 
else { 
    double ScalingFactor = 50/(3*Math.abs(distance)); 
} 

Когда щелчок 50px далеко, расстояние становится 50. Подключив 50 к формуле, получим 50/(3 * 50) = 1/3, как вам нужно. Нам понадобилось выражение if-else для обработки случая, когда расстояние равно 0. Забирая 0 в формулу, вы получите 50/0, что даст вам ошибку. Теперь выполните:

double toMove = (x-mySeekbarX)*ScalingFactor; 

А затем добавьте toMove в координату X вашего поискового бара. : D

Надеюсь, я помог: D

+0

Да, спасибо вам большое! Но что вы имели в виду, говоря «координата x для поиска»? Вы предлагаете использовать «seekbar.setProgress (toMove)», не так ли? Извините за глупый вопрос ... :) – pippo

+1

@pippo Не совсем, получите переменную, которая отслеживает текущий ход поиска. Затем добавьте toMove к нему, а затем установите это как «Прогресс». Если вам нужна помощь, спросите! Постскриптум Если вы считаете, что ответ удовлетворительный, отметьте его как принятый и, возможно, проголосуйте за него? ; D – Rippr

+0

Большое вам спасибо за вашу доброту! Ты мне очень помог в моей работе! Поэтому я нашел это решение: по вашему мнению, я переопределил setOnTouchListener и следил за своей позицией, когда вы нажимали на экран поиска. Материал scalingfactor похож на то, что вы написали, но я добавил немного трюка, чтобы сделать его более сдержанным: я разделил свой event.getX() на (seekbar.getWidth()/seekbar.getMax()), чтобы сделать мой x- перемещение оси больше похоже на мои движения в поисковых барах;), а затем setProgress (getProgress() + toMove), все внутри моей поисковой панели onTouchListener. Все идет прямо сейчас! большое спасибо!! :) – pippo