2011-08-13 18 views
11

Jak mogę narysować przycisk na górze kanwy w widoku niestandardowym? (Najlepiej na środkowej prawej stronie) Czy przed wywołaniem przycisku button.draw (canvas) muszę coś zadzwonić?Przycisk do rysowania systemu Android na płótnie z niestandardowym widokiem?

public class MyClass extends View { 
    public Simulation(Context context) { 
      super(context); 
      pauseButton.setText("TestButton"); 
      pauseButton.setClickable(true); 
      pauseButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
      Log.i(TAG, "Button Pressed!"); 
      } 
      }); 
    public onDraw(Canvas canvas) { 
      super.onDraw(canvas); 
      pauseButton.draw(canvas); 
    } 
    } 

Dzięki za poświęcony czas

+0

super.onDraw (płótno); – confucius

+0

'super.onDraw (canvas);' nie naprawił problemu? @Nammari – unknownone

+0

Jaka jest obecna sytuacja? Czy to rysunek? lub rysowanie w niewłaściwym miejscu? – Ronnie

Odpowiedz

14

Nie można wstawić przycisk na płótnie. Canvas to interfejs dla bitmapy lub bufora bitmapowego dla widoku. Możesz narysować tylko inną bitmapę lub piksele, a nie wstawić obiektu lub widżetu.

Istnieją pewne rozwiązania:

  1. jak sugeruje Nikolay, użyj FrameLayout i tworzą dwie warstwy (poglądów), pierwszy swój własny widok i drugi LinerView lub RelativeView, która wejdzie na górę, gdzie można mieć przyciski itp

  2. narysować obraz na płótnie buttun następnie użyj onTouchEvent w widoku niestandardowym i test współrzędnych w dotyku, a następnie zrobić coś ... przykładem dla onTouchEvent tutaj: Make certain area of bitmap transparent on touch

+0

Jak mogę dodać mój niestandardowy widok do pliku xml? Dzięki za odpowiedź – unknownone

+1

To długa historia, musisz szukać przykładów ... ale w zasadzie tworzysz nowy tag, np. .... w xml i następnie utwórz nową klasę o nazwie MyView, która rozszerza widok, który ma konstruktor MyView (kontekst kontekstowy, atrybuty AttributeSet) {super (kontekst, attrs); ....} w tym przykładzie po prostu dodaj konstruktora, o którym wspominałem: http://stackoverflow.com/questions/6308106/view-inflation-and-custom-views – Lumis

+0

OK Dzięki! – unknownone

4

Dlaczego trzeba wyciągnąć przycisk samodzielnie? Użyj FrameLayout i po prostu przycisk nałożony na niestandardowy widok.

-1

Spróbuj

public onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.save(); 
     pauseButton.draw(canvas); 
     canvas.restore(); 
} 
Powiązane problemy