Возможно ли реализовать кнопку быстрой перемотки вперед, используя событие кнопки onLongClick?
РЕДАКТИРОВАТЬ
я использовал runnable внутри onlongclicklistner и добавлял код для справки, который нуждается :)
Button.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
final Runnable r = new Runnable()
{
public void run()
{//do the forwarding logic here
if(Button.isPressed()){
Button.postDelayed(this, 1000); //delayed for 1 sec
}else{
Button.postInvalidate();
Button.invalidate();
}
}
};
Button.post(r);
return true;
}
});
В вашем событии onLongClick
установите переменную-член (например: mShouldFastForward
) в true
.
В остальной части вашего кода (возможно, каждый кадр играл?) Проверьте, если mShouldFastForward == true
; если это так, выполните ускоренную перемотку вперед в этом фрейме.
Используйте событие onTouch
чтобы захватить MotionEvent.ACTION_UP
чтобы установить mShouldFastForward
в false
.
Я сделал это в этом проекте (проект еще не закончен (т.е. Отполирован), но быстро работает):
https://bitbucket.org/owentech/epileptic-gibbon-android
Взгляните на playerfragment.java:
Я обрабатываю это, используя Threads для ускоренной перемотки медиаплеер.
Пример кода из проекта:
/*******************************/
/* Fast-Forward button actions */
/*******************************/
ffbutton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent event) {
switch (event.getAction() ) {
case MotionEvent.ACTION_DOWN:
arrays.fastforwardpressed = true;
FastForwardThread newFFThread = new FastForwardThread();
arrays.fastforwardfrom = mp.getCurrentPosition();
arrays.fastforwardto = arrays.fastforwardfrom;
newFFThread.start();
break;
case MotionEvent.ACTION_UP:
arrays.fastforwardpressed = false;
mp.seekTo(arrays.fastforwardto);
break;
}
return true;
}
});
public class FastForwardThread extends Thread
{
public FastForwardThread()
{
super("FastForwardThread");
}
public void run()
{
while (arrays.fastforwardpressed == true)
{
arrays.fastforwardto = arrays.fastforwardto + 10000;
int fastforwardseconds = arrays.fastforwardto / 1000;
int hours = fastforwardseconds / 3600, remainder = fastforwardseconds % 3600, minutes = remainder / 60, seconds = remainder % 60;
String Hours = Integer.toString(hours);
String Minutes = Integer.toString(minutes);
String Seconds = Integer.toString(seconds);
if (Hours.length() == 1)
{
Hours = "0" + Hours;
}
if (Minutes.length() == 1)
{
Minutes = "0" + Minutes;
}
if (Seconds.length() == 1)
{
Seconds = "0" + Seconds;
}
arrays.formattedfftime = Hours + ":" + Minutes + ":" + Seconds;
fastforwardHandler.sendEmptyMessage(0);
try
{
sleep(100);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}