2015-10-01 30 views
0

类三角绘制三角形路径留下痕迹

public class Triangle extends View { 
    private int x, y; 
    private int _xDelta, _yDelta; 
    private Point triangleA = new Point(); 
    private Point triangleB = new Point(); 
    private Point triangleC = new Point(); 
    public static Path trianglePath = new Path(); 
    private Paint paintTriangle = new Paint(); 

    public Triangle(Context context) { 
     super(context); 
     init(null, 0); 
    } 

    public Triangle(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(attrs, 0); 
    } 

    public Triangle(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(attrs, defStyleAttr); 
    } 

    private void init(AttributeSet attrs, int defStyleAttyr) { 
     paintTriangle.setColor(Color.RED); 
     paintTriangle.setStyle(Style.FILL); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 

     final int X = (int) event.getRawX(); 
     final int Y = (int) event.getRawY(); 
     switch (event.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_DOWN: 
      _xDelta = X - x; 
      _yDelta = Y - y; 
      break; 
     case MotionEvent.ACTION_UP: 
      break; 
     case MotionEvent.ACTION_POINTER_DOWN: 
      break; 
     case MotionEvent.ACTION_POINTER_UP: 
      break; 
     case MotionEvent.ACTION_MOVE: 
      x = X - _xDelta; 
      y = Y - _yDelta; 
      break; 
     } 
     invalidate(); 
     return true; 

    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     triangleA.set(x - 100 - 10, y + 100 + 10); 
     triangleB.set(x, y - 100 - 10); 
     triangleC.set(x + 100 + 10, y + 100 + 10); 
     trianglePath.moveTo(triangleA.x, triangleA.y); 
     trianglePath.lineTo(triangleB.x, triangleB.y); 
     trianglePath.lineTo(triangleC.x, triangleC.y); 
     trianglePath.lineTo(triangleA.x, triangleA.y); 
     trianglePath.close(); 
     canvas.drawPath(trianglePath, paintTriangle); 

     invalidate(); 
    } 

} 

ActivityMain.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.example.squaremovement.MainActivity" > 

<com.example.squaremovement.Triangle 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

</RelativeLayout> 

MainActivity

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
} 

三角形留下痕迹它移动的时候,所以我怎么能删除它只会离开新的位置。还是有另一种解决方案? 这只是我的主要应用程序中的一个测试,我必须查看该路径是否包含其他路径。

回答

0

试着画你的三角形前清空画布:

canvas.drawColor(0, Mode.CLEAR); 
+0

它不工作它的唯一的事情就是使背景黑色 –

+0

在列表中我只是想出了如何绘制:D –

0

我CIND数字出来,但因为我需要使用路径另一种观点认为,看它是否含有其他我不能用它像通过使用范围或类似的东西

路径我刚刚创建的路径在OnDraw中这样

@Override 
    protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    triangleA.set(x - 100 - 10, y + 100 + 10); 
    triangleB.set(x, y - 100 - 10); 
    triangleC.set(x + 100 + 10, y + 100 + 10); 
    Path trianglePath = new Path(); 

    trianglePath.moveTo(triangleA.x, triangleA.y); 
    trianglePath.lineTo(triangleB.x, triangleB.y); 
    trianglePath.lineTo(triangleC.x, triangleC.y); 
    trianglePath.lineTo(triangleA.x, triangleA.y); 
    trianglePath.close(); 

    canvas.drawPath(trianglePath, paintTriangle); 

}