Alanagh
Alanagh

Reputation: 234

using Canvas in android

I am trying to use Canvas that has been created in external class. However, the app does not run. Here is my code for MyImge where activity starts

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;


public class MyImage2 extends Activity  {
    DemoView draw; 
    private int     imageSizeX = 2047;
    private int     imageSizeY = 2047;
    private int     current_drawable = R.drawable.image;



   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

  Map<String, Integer> map = new HashMap<String, Integer>();
  map.put("blah", current_drawable);

  ImageView img=(ImageView)findViewById(R.id.imageView); 

  Bitmap bmp=BitmapFactory.decodeResource(getResources() ,current_drawable);
  draw = (DemoView)findViewById(R.id.demo);

  imageSizeX  = bmp.getWidth()/2;
  imageSizeY = bmp.getHeight()/2; 
  Bitmap resizedbitmap=Bitmap.createScaledBitmap(bmp, imageSizeX, imageSizeY, true); 
  img.setImageBitmap(resizedbitmap);     


  }
}

and my DemoView as follows

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;

import android.view.View;

public class DemoView extends View{
    public DemoView(Context context){
        super(context);
    }

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


        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);

        // make the entire canvas white
        paint.setColor(Color.WHITE);
        canvas.drawPaint(paint);

        paint.setAntiAlias(false);
        paint.setColor(Color.GREEN);
        canvas.drawRect(100, 5, 200, 30, paint);
        canvas.drawLine(0, 300 , 320, 300, paint);

    }
}

the layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
       <ImageView
        android:id="@+id/imageView"
         android:layout_width="fill_parent"       
         android:scaleType="matrix"         
        android:layout_height="525px">
   </ImageView>

    <view class="com.test.DemoView"
     android:id="@+id/demo"
        android:layout_width="fill_parent"
        android:layout_height="125px"/>
</LinearLayout>

if I remove the tag com.myimage2.DemoView I can see the image, however my goal is to see the image and canvas. Could someone help please.

Error log:

!ENTRY com.android.ide.eclipse.adt 2 0 2011-04-10 02:19:27.204 
!MESSAGE AndroidManifest: Ignoring unknown 'com.test.DemoView' XML element 
!ENTRY com.android.ide.eclipse.adt 2 0 2011-04-10 02:19:27.891 
!MESSAGE AndroidManifest: Ignoring unknown 'view' XML element

Many thanks in advance.

Upvotes: 0

Views: 3372

Answers (2)

mexok
mexok

Reputation: 89

I don't know what you want to do with your code in your onCreate-method in the class "MyImage2".

You need just 2 lines to set a canvas view:

draw=new DemoView(this);
setContentView(draw);

By setting your content view to the main layout, the canvas will never be seen. So don't use your main layout, just print everything in the canvas.

Hope this will help you.

Upvotes: 1

devisnik
devisnik

Reputation: 256

I think you need to provide one of the other constructors (one that can handle AttributeSet) in order for the classs to be instantiated from xml. Try adding DemoView(Context context, AttributeSet attrs).

Upvotes: 1

Related Questions