2012-09-27 51 views
2

我试图用TouchEvent做一个简单的自定义视图。但是,如果我点击n拖动鼠标光标没有画任何东西。这是我应该在模拟器上测试TouchEvent的方式吗?或者我应该在真正的设备上运行应用程序(它也不工作)。感谢名单自定义视图触摸事件不起作用

public class TouchEventView extends View { 

    private Paint paint = new Paint(); 
     private Path path = new Path(); 

     public TouchEventView(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     paint.setAntiAlias(true); 
     paint.setColor(Color.WHITE); 
     paint.setStyle(Paint.Style.STROKE); 
     paint.setStrokeJoin(Paint.Join.ROUND); 
     paint.setStrokeWidth(5f); 
     } 


     @Override 
     protected void onDraw(Canvas canvas) { 
     canvas.drawPath(path, paint); 
     } 

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

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
      path.moveTo(eventX, eventY); 
      return true; 
      case MotionEvent.ACTION_MOVE: 
      path.lineTo(eventX, eventY); 
      break; 
      case MotionEvent.ACTION_UP: 
      // nothing to do 
      break; 
      default: 
      return false; 
     } 

     // Schedules a repaint. 
     invalidate(); 
     return true; 
     } 
} 
+0

尝试投掷'Log.d(”调用“,”Action Down“);','Log.d(”DEBUG“,”Action Move“);'和Log.d(”DEBUG“,”Action Up“);'你可以确定你的触摸事件正在被捕获...... – Rawr

+0

http://developer.android.com/guide/topics/ui/custom-components.html提及'扩展onDraw()和onMeasure()'。 onMeasure()是否适合您的视图? (猜不到) – sandrstar

+0

是的,我做了,事件被捕获得很好。 – Tanvir

回答

0

我在模拟器尝试这个代码和它的作品,记得把左边的按钮,一边移动鼠标在模拟器上的观点:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    int action = event.getAction() & MotionEvent.ACTION_MASK; 
    //Log.d("CV", "Action ["+action+"]"); 
    switch(action) { 
     case MotionEvent.ACTION_DOWN : { 
      path.moveTo(event.getX(), event.getY()); 

      break; 
     } 
     case MotionEvent.ACTION_MOVE : { 
      path.lineTo(event.getX(), event.getY()); 

      break; 
     } 

    } 

    invalidate(); 
    return true; 
} 


@Override 
protected void onDraw(Canvas canvas) { 

    canvas.drawPath(path, myPaint); 
} 

private void init() { 
    myPaint = new Paint(); 
    myPaint.setStyle(Paint.Style.STROKE); 
    myPaint.setColor(Color.CYAN); 
}