2013-05-11 3 views
0

Я хочу, чтобы поместить красные круги, где я потрогать изображение и есть класс, который прослушивает на ощупь и отправляет координаты к другому классу:рисовать круг на контакт с собственным классом

public class Report extends Fragment { 
private Context activity; 
private Point point = new Point(); 
private DrawingCrl imgCircle = new DrawingCrl(); 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.report, container, 
      false); 
    activity = this.getActivity(); 

      //Where I'm doing the touching and respond to that: 
    final View touchView = rootView.findViewById(R.id.ImageC); 
    touchView.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      point.x = Float.valueOf(event.getX()); 
      point.y = Float.valueOf(event.getY()); 
          touchView = imgCircle.DrawCircle(Point point); 
      return true; 
     } 
    }); 

    return rootView; 

    public class Point { 
     float x; 
     float y; 
} 

}

Когда я называю DrawCircle Я хочу, чтобы класс DrawingCrl сделать это, нарисуйте круг для меня на точке я посылаю к методу:

public class DrawingCrl { 
private Bitmap mBitmap; 
private Paint paint; 
    private Canvas canvas = new Canvas(); 

public void DrawCircle(Point point) { 
    mBitmap = Bitmap.createBitmap(400, 800, Bitmap.Config.ARGB_8888); 
    paint = new Paint(); 
    paint.setColor(Color.RED); 
    paint.setStyle(Style.FILL); 
    canvas.drawCircle(point.x, point.y, 50, paint); 
} 
} 

Я прочитал как getting X and Y coordinates and drawing circle и Draw Circle on touch, но не получите, как сделать рисунок круга.

Я довольно новичок в android, так жаль, что у меня много неудач noob. Надеюсь, вы поможете мне справиться с этим! Благодаря! :)

ответ

0

Хорошо, вот как бы я это сделал, но я немного поменяю ваш код.

Сначала я хотел бы изменить свой класс DrawingCrl для всего магазин местоположения (и, возможно, Paint объекта, но это, вероятно, лучше подходит как статическая совместно всему DrawingCrls), как это:

public class DrawingCrl { 
    public Point myLoc; 
    public Paint paint; 

    public void DrawCircle(Point point) { 
     paint = new Paint(); 
     paint.setColor(Color.RED); 
     paint.setStyle(Style.FILL); 
     myLoc = point; 
    } 
} 

Сохранение Вектор объектов DrawingCrl созданные в вашей деятельности и создающие новые в обработчике событий onTouch.

Это идет в классе Report:

java.util.Vector<DrawingCrl> myCircles = new java.util.Vector<DrawingCrl>(); 

Тогда в «onTouch» создать новый объект круг и сохранить его:

@Override 
    public boolean onTouch(View v, MotionEvent event) { 
     point.x = Float.valueOf(event.getX()); 
     point.y = Float.valueOf(event.getY()); 

     // create a new Circle here and save it 
     DrawingCrl c = new DrawingCrl(point); 
     myCircles.add(c); 
     return true; 
    } 

Тогда я бы переопределить метод «OnDraw» вашего Просмотрите «touchView».

«onDraw» предоставит вам Canvas для рисования, поэтому не создавайте свои собственные, как вы сейчас делаете в своем классе DrawingDMG.

@Override 
protected void onDraw(Canvas c) 
{ 
    for (DrawingCrl c : myCircles) 
    { 
    c.drawCircle(c.myLoc.x, c.myLoc.y, 50, c.paint); 
    } 
} 
+0

Как это: «@Override защищен недействительным OnDraw() { DrawCircle(); } ' Но как заставить метод onDraw запускать? И это все? У вас есть небольшой пример? – user2373869

+0

См. Отредактированный ответ – spartygw

+0

OnDraw будет вызываться View, когда ему нужно нарисовать себя. Вы не называете это напрямую. Кстати, этот код был просто введен в редакторе stackoverflow. Там может быть опечатка, но она должна обеспечить вам реальную близость к тому, что вы хотите. – spartygw

Смежные вопросы