2011-11-14 9 views
3

私は1つのクラスを作成しました:canvas of view拡張クラスをアクティビティクラスに使用するにはどうすればよいですか?

public class TestCanvas extends View { 

    public TestCanvas(Context context) { 
     super(context); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Paint paint = new Paint(); 
     paint.setColor(Color.RED); 

     canvas.drawText("kal", 0, 100, paint); 
     canvas.save(); 
    } 
} 

は今、私は活動からそのクラスを呼び出す:

public class TestActivity extends Activity { 

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

     TestCanvas tcanvas=new TestCanvas(); 

     frameLayout=(FrameLayout)findViewById(R.id.frameLayout1); 
     frameLayout.addView(tcanvas); 
    } 
} 

は、今私はアクティビティクラスにキャンバスを取得したいとImageViewのに設定。どうすればいい?

+0

を持つ人のためのソリューションであるあなたは、いくつかの 'ImageView'要素にキャンバスを設定しますか?または、キャンバスを 'R.id.frameLayout1'に表示したいだけですか? –

+0

キャンバスを1つのImageviewに設定したいのですが... – Kalpesh

+0

特定のビュー内で画面に描画したいだけですか? ImageViewである必要はないため、任意のカスタムビューを使用できます。なぜそれがImageViewになる必要がありますか?そのための特別な要件はありますか? –

答えて

5

Viewから独自のクラスを継承し、onDraw()onMeasure()を上書きする必要があります。あなたがTestCanvasとやっていたように。例は:

package com.yourapphere; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Paint.Style; 
import android.util.AttributeSet; 
import android.view.View; 

public class TwoDee extends View { 
    private int mWidth; 
    private int mHeight; 


    public TwoDee(Context context) { 
     super(context); 
    } 

    public TwoDee(Context context, AttributeSet attribs) { 
     super(context, attribs); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Paint paint = new Paint(); 
     paint.setColor(Color.GRAY); 
     paint.setStyle(Style.FILL); 
     canvas.drawPaint(paint); 

     paint.setColor(Color.BLUE); 
     canvas.drawLine(0, 0, mWidth, mHeight, paint); 
     canvas.drawLine(mWidth, 0, 0, mHeight, paint); 

     paint.setColor(Color.RED); 
     canvas.drawText("0 kal", 50, 85, paint); 
     canvas.save(); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     mWidth = View.MeasureSpec.getSize(widthMeasureSpec); 
     mHeight = View.MeasureSpec.getSize(heightMeasureSpec); 
     setMeasuredDimension(mWidth, mHeight); 
    } 
} 


は、以下のように、あなたの活動のXMLレイアウトにカスタムビューを追加します。

<?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" 
    > 
     <TextView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/hello" 
     /> 
     <com.yourapphere.TwoDee 
      android:layout_width="150dp" 
      android:layout_height="100dp" 
     /> 
</LinearLayout> 


何もあなたの活動のクラスに入りません。それでおしまい!

実際にImageViewを使用する必要がある場合:Viewの代わりにImageViewからカスタムビューを継承します。 How to take canvas on imageview in android
シンプルなカスタムビューのサンプルコード:Adding my custom View into an XML layout throws exception

読む続い
は、同様の質問を参照してくださいリンク& com.yourapphere.MyImageViewのようなカスタムImageViewの)


参照して、あなたの活動のレイアウトXMLで適切なImageViewのタグを置き換えますAndroid 2D描画について:http://developer.android.com/guide/topics/graphics/2d-graphics.html
Android 2Dコーディングチュートリアル:http://www3.ntu.edu.sg/home/ehchua/programming/android/Android_2D.html
シンプルな2Dゲームのチュートリアル:http://www.barebonescoder.com/2010/06/android-development-simple-2d-graphics-part-1/

+0

今、どのようにビットマップをカスタムビューから取得しますか? – Kalpesh

+0

オクラホマ...オクラホマ...オクラホマ...それを持っています...ありがとう、あなたに非常に感謝しています... – Kalpesh

+0

あなたの問題を解決するのに役立ちましたら、この回答をupvoteして受け入れてください。 –

1

ここでは、同じ問題

public class TestActivity extends Activity { 

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

    TestCanvas tcanvas=new TestCanvas(); 

    frameLayout=(FrameLayout)findViewById(R.id.frameLayout1); 
    frameLayout.addView(tcanvas); 

    Bitmap bitmap=Bitmap.createBitmap(440,587,Bitmap.Config.ARGB_8888); 
    Canvas c=new Canvas(bitmap); 
    tcanvas.draw(bitmap); 

    //now i use bitmap at for any use....... 

    } 
} 
関連する問題