2011-04-10 4 views
0

J'essaie d'utiliser Canvas qui a été créé en classe externe. Toutefois, l'application ne s'exécute pas. Voici mon code pour MyImge où l'activité commenceen utilisant Canvas dans android

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);  


    } 
} 

et mon DemoView comme suit

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); 

    } 
} 

la mise en page

<?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> 

si je retire l'étiquette com.myimage2.DemoView je peux voir l'image, mais mon but est de voir l'image et la toile. Quelqu'un pourrait-il aider s'il vous plaît.

journal d'erreur:

!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 

Un grand merci à l'avance.

+0

Essayez de nettoyer le projet. L'élément de vue doit être connu. – MByD

Répondre

1

Je pense que vous devez fournir l'un des autres constructeurs (un qui peut gérer AttributeSet) afin que les classes soient instanciées à partir de xml. Essayez d'ajouter DemoView (Context context, AttributeSet attrs).

+0

Merci beaucoup! Ça a marché. Mais pourriez-vous expliquer la raison d'avoir un autre constructeur s'il vous plaît. – Alanagh

+0

Le framework veut juste vous donner les paramètres xml. Vous devez donc fournir un constructeur capable de les gérer. Votre (ancien) n'est probablement pas appelé et pourrait être supprimé. – devisnik

1

Je ne sais pas ce que vous voulez faire avec votre code dans votre méthode onCreate dans la classe "MyImage2".

Vous devez seulement 2 lignes pour définir une vue sur la toile:

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

En définissant votre point de vue du contenu de la mise en page principale, la toile ne sera jamais vu. Donc, n'utilisez pas votre mise en page principale, imprimez simplement tout dans la toile.

J'espère que cela vous aidera.