Это мои первые вопросы, поэтому я приношу свои извинения, если формат немного неправильный.Как сделать кнопку прокрутки влево на Android
В настоящее время я работаю над проектом в Android Studio, где мне нужно сделать кнопку динамически, которая будет прокручиваться влево (как что-то в Mail для iPhone). Я знаю, что здесь было много вопросов о прокрутке, но я не мог найти ничего, что конкретно отвечало бы на мой вопрос. Я разместил свой код ниже. Любая помощь приветствуется. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
public class ViewHistoryActivity extends ActionBarActivity {
//list holding the pre-sorted logs stored in database
private ArrayList<WorkoutLog> logHistory;
private GestureDetectorCompat gd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_history);
logHistory = new ArrayList<WorkoutLog>();
// Create database handler. This allows easy interaction with
// the app's database.
DatabaseHandler db = new DatabaseHandler(this);
// Get sorted (by date) ArrayList of WorkoutLogs.
logHistory = (ArrayList<WorkoutLog>) db.getAllWorkoutLogs();
//loop that creates buttons based on the number of logs stored in the database
//these buttons will be scrollable because of the xml file. Clicking on a button will
//bring you to another activity in which you can see the contents of the log
for (int i==0; i<logHistory.size(); i++) {
//new button being created for log
Button myButton = new Button(this);
//set the text of the log to be the logs title (will add date later)
myButton.setText(logHistory.get(i).getLogTitle() + "\n" + logHistory.get(i).getLogDateString() + "\n\n\n");
//needed because logHistory was complaining below for intent.putExtra(...)
final int test = i;
//allows user to click on it
myButton.setClickable(true);
//when the button is click on by the user, starts the new activity with the detailed
//log information. Right now, when clicked on the log just returns to the main page
myButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(ViewHistoryActivity.this, ViewHistoryDetailed.class);
intent.putExtra("logID",String.valueOf(logHistory.get(test).getLogID()));
startActivity(intent);
}
});
myButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
gd = new GestureDetectorCompat(ViewHistoryActivity.this, new MyGestureListener());
gd.onTouchEvent(event);
return true;
}
class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
//private static final String DEBUG_TAG = "Gestures";
private static final int SWIPE_THRESHOLD = 100;
private static final int SWIPE_VELOCITY_THRESHOLD = 100;
public boolean onDown(MotionEvent event) {
Toast.makeText(ViewHistoryActivity.this, "got to onDown", Toast.LENGTH_SHORT).show();
return true;
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Toast.makeText(ViewHistoryActivity.this, "Got to here", Toast.LENGTH_SHORT).show();
boolean result = false;
try {
float diffY = e2.getY() - e1.getY();
float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) > Math.abs(diffY)) {
if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0) {
onSwipeRight();
} else {
// onSwipeLeft();
}
}
result = true;
} else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
if (diffY > 0) {
// onSwipeBottom();
} else {
// onSwipeTop();
}
}
result = true;
} catch (Exception exception) {
exception.printStackTrace();
}
return result;
}
public void onSwipeRight() {
Toast.makeText(ViewHistoryActivity.this, "Caught swipe left", Toast.LENGTH_SHORT).show();
}
}
});
//gets the layout of this class, which has been nested inside a scrollable interface
LinearLayout layout = (LinearLayout) findViewById(R.id.View_History);
//sets button parameters
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
//adds button to the layout
layout.addView(myButton, lp);
}
}
Прямо сейчас, когда я нажимаю вниз, это дает мне сообщение Toast, «onDown была нажата». Но всякий раз, когда я пытаюсь бросить, он ничего не делает - я не получаю никаких сообщений.
Спасибо за предложение, это имеет смысл. Я пытался сделать это заранее, но это дает мне ошибку: «Не удается разрешить символ MyGestureListener()». Я считаю, что это связано с тем, что этот класс встроен в метод onTouchListener(). Любые предложения о том, как это исправить? –
Переместите MyGestureListener из onTouchListener. Либо поставьте его в отдельный класс, либо поставьте его как внутренний класс ViewHistoryActivity. Я бы посоветовал узнать, как работают классы на Java, поскольку это будет тяжелая борьба, если вы не понимаете этого, лучше понять принципы Java, прежде чем рискнуть в Android - это моя рекомендация. –