У меня есть приложение, в котором его деятельность имеет внутренний класс, расширяющий представление.класс представления отображает растровое изображение, и все это прекрасно работает.То, что я пытаюсь сделать сейчас, это поместить кнопку в представление, которое отображает растровое изображение.Для этого я сделал оригинальный внутренний класс TouchView отдельным классом.Затем я объявил его в XML-файле в папке макета внутри относительного макета и под кнопкой.я думал, что это даст видимость кнопки, плавающей в верхней части окна.Я получаю следующую ошибку.кто-нибудь знает почему?спасибо
05-09 11:45:22.603: ERROR/AndroidRuntime(12211): Uncaught handler: thread main exiting due to uncaught exception
05-09 11:45:22.613: ERROR/AndroidRuntime(12211): java.lang.NullPointerException
05-09 11:45:22.613: ERROR/AndroidRuntime(12211): at android.graphics.Canvas.throwIfRecycled(Canvas.java:954)
05-09 11:45:22.613: ERROR/AndroidRuntime(12211): at android.graphics.Canvas.drawBitmap(Canvas.java:980)
05-09 11:45:22.613: ERROR/AndroidRuntime(12211): at com.tecmark.TouchView.onDraw(TouchView.java:172)
05-09 11:45:22.613: ERROR/AndroidRuntime(12211): at android.view.View.draw(View.java:6535)
Код:
public class Jjilapp extends Activity {
private static final String TAG = "*********jjil";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e(TAG, "***********inside oncreate about to set contentview = ");
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.touchview);
}
}
введите код здесь
class TouchView extends View{
private File tempFile;
private byte[] imageArray;
private Bitmap bgr;
private Bitmap bm;
private Bitmap whitebm;
private Paint pTouch;
private int centreX = 1;
private int centreY = 1;
private int radius = 50;
public TouchView(Context context, AttributeSet attr) {
super(context,attr);
}
public TouchView(Context context) {
super(context);
.........code that gets bitmap and changes it
}// end of touchView constructor
public void changePixel(){
for (int i=0; i < bgr.getWidth(); ++i) {
for (int y=0; y < bgr.getHeight(); ++y) {
if( Math.sqrt( Math.pow(i - centreX, 2) + ( Math.pow(y - centreY, 2) ) ) <= radius ){
bgr.setPixel(i,y,Color.rgb(255,255,255));
}
}
}
}// end of changePixel()
@Override
public boolean onTouchEvent(MotionEvent ev) {
......code for touch events
}//end of onTouchEvent
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawBitmap(whitebm, 0, 0, null);
canvas.drawBitmap(bgr, 0, 0, null);
canvas.drawCircle(centreX, centreY, radius,pTouch);
}//end of onDraw
}
Макет:
<?xml version="1.0" encoding="utf-8" ?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content" android:gravity="fill">
<Button android:text="Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
<com.tecmark.TouchView
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</RelativeLayout>