Android LAYOUT XML / Java ошибка - PullRequest
0 голосов
/ 03 мая 2011

Я пытаюсь получить панель с холстом, содержащим изображение, которое я поместу поверх другого изображения, и когда я коснусь экрана, верхнее (наложенное) изображение будет стерто с помощью PoerterDuffXfermode (PorterDuff.Mode) и т. Д. Во всяком случае, у меня есть функциональность, сделанная и очищенная благодаря помощи парня на этом форуме, который предоставил некоторый код, который в основном выполнял именно то, что мне нужно, но у меня есть одна небольшая проблема - реализация кода парнями, не позволит мне правильно ссылаться на класс Panel в XML, чтобы поместить Panel в предварительно определенный файл XML (main.xml). это дает мне ошибку с указанием

Пользовательская панель просмотра не использует конструкторы представления с 2 или 3 аргументами; Атрибуты XML не будут работать

Вот так выглядит мой xml в базовом масштабе (просто вид на месте во внешнем линейном макете).

<com.easyscratch.full.Panel 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id ="@+id/easyCustView"
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:visibility="visible"
    android:focusableInTouchMode="true"/>   

Ява выглядит следующим образом. (КЛАСС ПАНЕЛИ)

package com.easyscratch.full;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Bitmap.Config;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

class Panel extends View
{

    private Bitmap  mBitmap;
    private Canvas  mCanvas;
    private Path    mPath;
    private Paint   mPaint;
    Bitmap bitmap;
    Canvas pcanvas ;
     int x = 0;
     int y =0;
     int r =0;
    public Panel(Context context) {
        super(context);

        Log.v("Panel", ">>>>>>");

        setFocusable(true);
        setBackgroundColor(Color.GREEN);

        // setting paint 
             mPaint = new Paint();
            mPaint.setAlpha(0);
            mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
            mPaint.setAntiAlias(true);

            // getting image from resources
            Resources r = this.getContext().getResources();

            Bitmap bm = BitmapFactory.decodeResource(getResources(),  R.drawable.foreground_image);

            // converting image bitmap into mutable bitmap

              bitmap =  Bitmap.createBitmap(295, 260, Config.ARGB_8888);

               pcanvas = new Canvas();
              pcanvas.setBitmap(bitmap);                   // drawXY will result on that Bitmap
              pcanvas.drawBitmap(bm, 0, 0, null);


    }

    @Override
    protected void onDraw(Canvas canvas) {


    // draw a circle that is  erasing bitmap            
        pcanvas.drawCircle(x, y, r, mPaint);

        canvas.drawBitmap(bitmap, 0, 0,null);

        super.onDraw(canvas);

    }



    @Override
    public boolean onTouchEvent(MotionEvent event) {

         // set paramete to draw circle on touch event
         x = (int) event.getX();
            y = (int) event.getY();

            r =20;
            // Atlast invalidate canvas
            invalidate();
            return true;
    }

}

ОСНОВНОЙ ГЛАВНЫЙ КЛАСС ВЫЗОВ MAIN.XML

package com.easyscratch.full;

import android.app.Activity;
import android.os.Bundle;

public class easyscratch extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

,, Если бы только кто-нибудь сказал мне, что я делаю неправильно, или, может быть, альтернативная реализация

public Panel(Context context) {
    super(context);

в любом случае, большое спасибо в продвинутой версии, мы очень скоро поможем:)

Приветствия, парни!

1 Ответ

1 голос
/ 03 мая 2011

Ваш конструктор для Panel также должен, по крайней мере, иметь поле AttributeSet.

public Panel(Context context, AttributeSet attr){
   super.(context, attr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...