フレームと複数の画像を追加するには、キャンバス クラスを使用する必要があります。しかし、私の問題は、アクティビティ クラスでキャンバス ビューを使用する必要があることです。XML で使用できるように、このキャンバス ビューをウィジェットとして使用したいと考えています。
このコードを使用してこれを試しました:
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);
}
public void setImage(Drawable myImg) {
newImg = myImg;
invalidate();
}
}
次のように私の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:id="@+id/twoDee1"
android:layout_width="150dp"
android:layout_height="100dp"
/>
</LinearLayout>
そして、私は次のように私のアクティビティクラスでそれにアクセスしています:
TwoDee myCanvas;
myCanvas = (TwoDee)findViewById(R.id.twoDee1);
myCanvas.setImage(drawable);
私の問題は、アクティビティ クラスから setImage() 関数を呼び出そうとすると、null ポインター例外が表示されることです。Activity クラスを使用してキャンバス ビューに画像を追加するにはどうすればよいですか。setContentView
これにより、キャンバスビューのみがアクティビティに表示されるため、使用したくありません。
LogCat 出力:
FATAL EXCEPTION: main
java.lang.NullPointerException
at iTagz.android.Dialog_ImagePreview$1.onClick(Dialog_ImagePreview.java:84)
at android.view.View.performClick(View.java:2485)
at android.view.View$PerformClick.run(View.java:9081)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3770)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:638)
at dalvik.system.NativeStart.main(Native Method)
Dialog_ImagePreviewは、SetImageメソッドを呼び出している場所からのアクティビティです。