я не мог найти свое решение(), но вот то, что я сделал сегодня:
package com.example.test1;
import android.os.Bundle;
import android.app.Activity;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.Menu;
import android.view.MotionEvent;
import android.widget.TextView;
public class MainActivity extends Activity implements OnGestureListener {
private TextView TextView01;
private TextView TextView02;
private TextView TextView03;
private TextView TextView04;
private GestureDetector gestureScanner;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView01 = (TextView)findViewById(R.id.TextView01);
TextView02 = (TextView)findViewById(R.id.TextView02);
TextView03 = (TextView)findViewById(R.id.TextView03);
TextView04 = (TextView)findViewById(R.id.TextView04);
gestureScanner = new GestureDetector(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
int whereIsFirstX = 0;
int whereIsFirstY = 0;
int diffrenceBetweenFirstAndCurrentTouchPositionX = 0;
int diffrenceBetweenFirstAndCurrentTouchPositionY = 0;
int changeInHorizontal = 0;
int changeInVertical = 0;
public boolean onTouchEvent(MotionEvent event) {
int eventaction = event.getAction();
int X = (int)event.getX();
int Y = (int)event.getY();
if (eventaction == MotionEvent.ACTION_DOWN) {
whereIsFirstX = X;
whereIsFirstY = Y;
}
if (eventaction==MotionEvent.ACTION_MOVE){
diffrenceBetweenFirstAndCurrentTouchPositionX = X - whereIsFirstX;
diffrenceBetweenFirstAndCurrentTouchPositionY = whereIsFirstY - Y;
}
// FINAL RESULT TO USE IN YOUR APP; I USED IT IN VERTICAL DIRECTION TO CHANGE SPEED IN GAME
//Here the difference is also divided by 10 to depress the influence of change into result value:
changeInHorizontal = changeInHorizontal + diffrenceBetweenFirstAndCurrentTouchPositionX/10;
changeInVertical = changeInVertical + diffrenceBetweenFirstAndCurrentTouchPositionY/10;
TextView03.setText("Simple Horizontal: " + Integer.toString(changeInHorizontal));
TextView04.setText("SimpleVertical: " + Integer.toString(changeInVertical));
try { // quiet screen
Thread.sleep(100);
} catch (Exception e) {
}
//Note that onTouchEvent function has to return it for onScroll method:
return gestureScanner.onTouchEvent(event);
}
public boolean onDown(MotionEvent arg0) {
// TODO Auto-generated method stub
return false;
}
public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,
float arg3) {
// TODO Auto-generated method stub
return false;
}
public void onLongPress(MotionEvent arg0) {
// TODO Auto-generated method stub
}
public void onShowPress(MotionEvent arg0) {
// TODO Auto-generated method stub
}
public boolean onSingleTapUp(MotionEvent arg0) {
// TODO Auto-generated method stub
return false;
}
int changeInHorizontalScroll;
int changeInVerticalScroll;
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
changeInHorizontalScroll = (int)(changeInHorizontalScroll - distanceX);
changeInVerticalScroll = (int)(changeInVerticalScroll + distanceY);
TextView01.setText("onScroll Horizontal: " + Integer.toString(changeInHorizontalScroll));
TextView02.setText("onScroll Vertical: " + Integer.toString(changeInVerticalScroll));
return false;
}
}
активность должны TextView01, TextView02, TextView03 и TextView04.
01 и 02 отображение увеличенных/уменьшенных значений с помощью жестов onScroll
использование метода. Я использовал его сегодня в первый раз. Существует только проблема с конструктором GestureDetector(this)
. Это устарело, и вы должны найти, как заменить его на современную версию (не должно быть сложно, но я давно не делал что-то с Android, и сегодня у меня нет времени делать это, мой друг ждет с виски: D).
Я попытался упомянуть onScroll
, потому что я не мог вспомнить, как я это делал ранее, просто касаясь событий. Представленный метод, который отображает результат в 03 и 04 TextViews, является правильным, но только тогда, когда пользователь не делает «возвратные ходы». Правильная работа только при падении пальца вниз, перемещение в горизонтальном или вертикальном направлении и возвращение назад, пока не перестанет касаться экрана. Это потому, что значение перемещения всегда добавляется в результат, не проверяя, становится ли оно больше или меньше. Я сделал это в феврале как-то, добавив еще какой-то код, но кто знает теперь, как ...; P
Пожалуйста, учтите, что я полный noob, и, возможно, есть другие более эффективные способы, но надеюсь, что это поможет :)
Я хочу реализовать ту же функциональность, что сделал наконец? – juned
Привет @juned, вам все еще нужно это? Извините, я пишу так поздно. Я даже не помню, в каком проекте я его использовал, но если вы не можете решить свою проблему, я мог бы раскошелиться в рабочем пространстве Android и искать его. Не могу пообещать, что найду его (я даже удалил Android SDK), но я мог бы приложить некоторые усилия, если вы все еще нуждаетесь. – bLAZ
Спасибо @bLAZY, было бы здорово, если бы вы нашли это для меня. Мне повезет, если вы сможете это найти. Большое спасибо – juned