2015-05-26 48 views
0

我創建一個自定義View裏面文本:觸摸效果 - Android電子

canvas.drawText(text, 
      bounds.centerX(), 
      _getTextVerticalCenterPosition(bounds, paint), 
      paint); 

_getTextVerticalCenterPosition剛剛返回y位置。

現在聯繫(onTouchEvent)我想爲用戶設置任何效果,以便在視覺上感覺到觸摸,但不知道從哪裏開始。 MotionEvent.ACTION_DOWN應該啓動效果,MotionEvent.ACTION_UP應該結束它並將文本返回到其初始外觀。那麼在屏幕上「滑動」手指呢?如果文本的初始外觀將在手指離開邊界後立即返回,但不是在MotionEvent.ACTION_UP之後返回。

@Override 
public boolean onTouchEvent(MotionEvent event) 
{ 
    float x = event.getX(); 
    float y = event.getY(); 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: { 
      if (bounds.contains(x, y)) { 
       // Text pressed 

      } 
     } 
    } 
    return true; 
} 

或者是有可能使用的基本看法,如Button,在我的自定義一個與圓弧和路徑結合起來呢?


解決方案

@Override 
public boolean onTouchEvent(MotionEvent event) 
{ 
    float x = event.getX(); 
    float y = event.getY(); 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: { 
      if (bounds.contains(x, y)) { 
       // Text pressed 
       _setTextColor(mOnTouchColor); 
       invalidate(); 
      } 
      break; 
     } 
     case MotionEvent.ACTION_MOVE: { 
      _setTextColor(mColor); 
      invalidate(); 
      break; 
     } 
     case MotionEvent.ACTION_MOVE: { 
      // Finger off the bounds 
      if (!bounds.contains(x, y)) { 
       _setTextColor(mColor); 
       invalidate(); 
      } 
      break; 
     } 
    } 
    return true; 
} 

回答

1

您可以使用onTouch這樣的伎倆,一件事是這裏重要的是調用invalidate() - 告訴視圖用新數據重繪自身

@Override 
public boolean onTouchEvent(MotionEvent event) 
{ 
    float x = event.getX(); 
    float y = event.getY(); 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: { 
      if (bounds.contains(x, y)) { 
       // Text pressed 
       // Change paint, text size or what ever 
       invalidate(); 
      } 
     } 
     case MotionEvent.ACTION_UP: 
       // Apply original paint, size, .. 
       invalidate(); 
    } 
    return true; 
} 
+0

謝謝,我用移動的手指添加了我的解決方案。 –