Używam następujący kodZwiększenie widoczności widokiem na Swipe za pomocą gestów w android
private GestureDetector.OnGestureListener mGestureListener = new GestureDetector.OnGestureListener()
{
private float lastDeltaValue;
private static final int MIN_DISTANCE = 15;
private static final int MIN_DISTANCE_Y = 25;
@Override
public boolean onDown(MotionEvent e)
{
lastDeltaValue = 0;
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e)
{
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
float startingX = (int)e1.getRawX();
float startingY = (int)e1.getRawY();
float endingX = (int)e2.getRawX();
float endingY = (int)e2.getRawY();
float deltaX = startingX - endingX;
float deltaY = startingY - endingY;
// swipe horizontal?
if(Math.abs(deltaX) > MIN_DISTANCE && Math.abs(deltaY) < MIN_DISTANCE_Y)
{
// left or right
if(deltaX > 0)
{
shouldCallBtn = SHOULD_CALL_WHERE;
if (gestureLayout.getVisibility() == View.GONE)
{
gestureLayout.setVisibility(View.VISIBLE);
gestureLayout.setAlpha(0.3f);
}
gestureText.setText(getString(R.string.option_where));
if (deltaX > lastDeltaValue)
{
if (gestureLayout.getAlpha() > 0.29 && gestureLayout.getAlpha() < 0.80)
gestureLayout.setAlpha(gestureLayout.getAlpha() + 0.1f);
}
else
{
if (gestureLayout.getAlpha() < 0.81 && gestureLayout.getAlpha() > 0.29)
gestureLayout.setAlpha(gestureLayout.getAlpha() - 0.1f);
}
Log.d("DELTA VALUES", String.valueOf(deltaX) + " == " + String.valueOf(lastDeltaValue) + " " +String.valueOf(gestureLayout.getAlpha()));
lastDeltaValue = deltaX;
}
else if(deltaX < 0)
{
shouldCallBtn = SHOULD_CALL_ONMYWAY;
if (gestureLayout.getVisibility() == View.GONE)
{
gestureLayout.setVisibility(View.VISIBLE);
gestureLayout.setAlpha(0.3f);
}
gestureText.setText(getString(R.string.option_onway));
if (deltaX > lastDeltaValue)
{
if (gestureLayout.getAlpha() > 0.29 && gestureLayout.getAlpha() < 0.80)
gestureLayout.setAlpha(gestureLayout.getAlpha() - 0.1f);
}
else
{
if (gestureLayout.getAlpha() < 0.81 && gestureLayout.getAlpha() > 0.29)
gestureLayout.setAlpha(gestureLayout.getAlpha() + 0.1f);
}
Log.d("DELTA VALUES", String.valueOf(deltaX) + " == " + String.valueOf(lastDeltaValue) + " " +String.valueOf(gestureLayout.getAlpha()));
lastDeltaValue = deltaX;
}
}
else
{
}
return false;
}
@Override
public void onLongPress(MotionEvent e)
{
gestureLayout.setVisibility(View.VISIBLE);
gestureLayout.setAlpha(0.8f);
gestureText.setText(getString(R.string.option_my_location));
sendLocBtn.performClick();
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
return false;
}
};
Początkowo GestureLayout
Widoczność jest GONE
. Po przesunięciu widoczność wzrośnie z 0,3 do 0,8. Jeśli spróbuję przesunąć w lewo, zwiększa wartość alfa o View
gdzieś na ekranie z tekstem podobnym (lewe przesuwanie), a także po prawej stronie.
Ten kod wydaje się działać, ale animacja alpha od niskiej do wysokiej nie jest standardowa.
Każda pomoc będzie pomocny
UWAGA: Nie muszę animację. Chcę, żeby było oparte na przesunięciu palca
Witam Muhammadzie. Kiedy próbuję uruchomić twój kod, następujące symbole są niezdefiniowane: 'R.string.option_my_location',' R.string.option_onway', 'R.string.option_where',' SHOULD_CALL_ONMYWAY', 'SHOULD_CALL_WHERE',' gestureLayout', 'gestText',' sendLocBtn' i 'shouldCallBtn'. Czy możesz podać przykład minimalny, pełny i sprawdzalny (http://stackoverflow.com/help/mcve)? Wówczas będzie można łatwo odtworzyć problem, który masz, co znacznie ułatwi udzielenie ci dobrej odpowiedzi. –
@MartinNordholts po prostu zamień je na cokolwiek lub skomentuj. Wykonaj jeden gest widzenia, który jest ważny, aby zwiększyć lub zmniejszyć jego widoczność. –
"Ten kod wydaje się działać, ale animacja alpha od niskiej do wysokiej nie jest standardowa." Jaki jest problem? Chcesz, aby alfa było animowane podczas przeciągania? – SharpEdge