增加使用手勢刷卡視圖的可視性我使用下面的代碼在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;
}
};
最初GestureLayout
能見度GONE
。刷卡後,其可見度將從0.3增加到0.8。如果我嘗試左移刷卡,在屏幕上的某個位置增加一個View
的alpha,並使用一些文本(如左滑動),然後右滑動。
此代碼似乎工作,但alpha從低到高的動畫不符合標準。
任何幫助將是有益的
注:我不需要的動畫。我希望它基於滑動的手指
嗨穆罕默德。當我嘗試運行你的代碼時,下面的符號是未定義的:'R.string.option_my_location','R.string.option_onway','R.string.option_where','SHOULD_CALL_ONMYWAY','SHOULD_CALL_WHERE','gestureLayout', 'gestureText','sendLocBtn'和'shouldCallBtn'。您能否提供一個最小化,完整和可驗證的示例(http://stackoverflow.com/help/mcve)?然後,您可以輕鬆地重現您遇到的問題,爲您提供一個很好的答案更容易。 –
@MartinNordholts只是用任何東西代替它們或將它們評論出來。使一個視圖gestureLayout對於增加或減少其可見性非常重要 –
「此代碼似乎可行,但alpha從低到高的動畫不符合標準。」有什麼問題? 你想要在刷卡過程中alpha被動畫? – SharpEdge