2016-05-21 15 views
0

Ich habe ein Problem, ich weiß nicht, wie Sie Schaltflächen auf meiner Leinwand erstellen. Dieser Code unten schrieb ich, um eine Linie auf einem Bild zu zeichnen. Dann möchte ich einige Knöpfe auf diesem Bild hinzufügen. Ich hoffe, ihr könnt mir helfen.Erstellen von Schaltflächen auf Leinwand in Android

public class DrawShape extends Activity implements View.OnTouchListener { 
ImageView imagTest; 
Bitmap bitmap; 
Canvas canvas; 
Paint paint; 
Button abc; 
float downX, downY, moveX, moveY, upX, upY = 0; 


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

    imagTest = (ImageView) findViewById(R.id.imgTest);//Add image 

    Display display = getWindowManager().getDefaultDisplay(); 
    int dw = display.getWidth(); 
    int dh = display.getHeight(); 

    Bitmap loadedBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image1);//load image onto bitmap 
    Bitmap scaledloadedBitmap = Bitmap.createScaledBitmap(loadedBitmap, dw, dh, false); 
    Bitmap drawableBitmap = scaledloadedBitmap.copy(Bitmap.Config.ARGB_8888, true); 
    Matrix matrix = new Matrix(); 
    imagTest.setScaleType(ImageView.ScaleType.MATRIX); 
    matrix.postRotate(90); 

    canvas = new Canvas(drawableBitmap); 
    paint = new Paint(); 
    paint.setColor(Color.GREEN); 
    paint.setShadowLayer(5, 2, 2, Color.BLUE); 
    paint.setStrokeWidth(10); 
    imagTest.setImageBitmap(drawableBitmap); 
    imagTest.setOnTouchListener(this); 


} 
@Override 
public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      downX = event.getX(); 
      downY = event.getY(); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      moveX = event.getX(); 
      moveY = event.getY(); 

      break; 
     case MotionEvent.ACTION_UP: 
      upX = event.getX(); 
      upY = event.getY(); 
      canvas.drawLine(downX, downY, upX, upY, paint);//Handle when touch up 
      imagTest.invalidate(); 
      break; 
    } 
    return true; 
} 
} 
+0

Sie können keine Schaltfläche zu einem Canvas hinzufügen. Sie können Schaltflächen zu ViewGroups nur hinzufügen, z. B. RelativeLayout, LInearLayout. – Arlind

Antwort

1

Sie können keine Schaltfläche auf der Leinwand platzieren. Sie können Canvas in eine neue Ebene einfügen und dann Ihre Schaltflächen in die zugehörige Ebene unter der Ebene mit der Leinwand einfügen.

0

Sie benötigen einen benutzerdefinierten Ansicht Klasse erstellen, die die View-Klasse erweitert Button und außer Kraft setzen ihre onDraw() Methode, wie folgt aus:

public class MyButtonClass extends Button { 
    public MyButtonClass(Context context) { 
     super(context); 

     // Here you can set a default parameters for this View, e.g.: 
     this.setText("My Green Button..."); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     // Here you need to declare what paint you canvas, e.g.: 
     canvas.drawColor(Color.GREEN); // Set color 
     canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), 
      R.drawable.my_button), 0f, 0f, null); // Set drawable 
     // .......... set others 

     super.onDraw(canvas); 
    } 
} 

Im onCreate() Methode, müssen Sie schreiben weiter:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    LinearLayout groupview = 
     (LinearLayout) findViewById(R.id.groupview); // Find container for button 
    MyButtonClass myBtn = new MyButtonClass(this); // Create custom button 
    groupview.addView(myBtn); // Add your button to layout 
} 
Verwandte Themen