Я играл с кодом, который я нашел по адресу Android Development - Playing with graphics in Android.Нет такого метода
К сожалению, мне не повезло с моей реализацией кода LOL, на который я полагаю, основываясь на LogCat, что Android не может найти способ, который существует.
Ниже приведены подробные сведения LogCat:
LogCat
02-08 12:43:07.725: E/AndroidRuntime(9284): FATAL EXCEPTION: main
02-08 12:43:07.725: E/AndroidRuntime(9284): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.odhranlynch.interiordesigner/com.odhranlynch.interiordesigner.NewProduct}: android.view.InflateException: Binary XML file line #6: Error inflating class com.odhranlynch.interiordesigner.NewProduct$designCanvas
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.os.Handler.dispatchMessage(Handler.java:99)
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.os.Looper.loop(Looper.java:123)
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.app.ActivityThread.main(ActivityThread.java:3691)
02-08 12:43:07.725: E/AndroidRuntime(9284): at java.lang.reflect.Method.invokeNative(Native Method)
02-08 12:43:07.725: E/AndroidRuntime(9284): at java.lang.reflect.Method.invoke(Method.java:507)
02-08 12:43:07.725: E/AndroidRuntime(9284): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
02-08 12:43:07.725: E/AndroidRuntime(9284): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
02-08 12:43:07.725: E/AndroidRuntime(9284): at dalvik.system.NativeStart.main(Native Method)
02-08 12:43:07.725: E/AndroidRuntime(9284): Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class com.odhranlynch.interiordesigner.NewProduct$designCanvas
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.view.LayoutInflater.createView(LayoutInflater.java:508)
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570)
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
02-08 12:43:07.725: E/AndroidRuntime(9284): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.app.Activity.setContentView(Activity.java:1663)
02-08 12:43:07.725: E/AndroidRuntime(9284): at com.odhranlynch.interiordesigner.NewProduct.onCreate(NewProduct.java:28)
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
02-08 12:43:07.725: E/AndroidRuntime(9284): ... 11 more
02-08 12:43:07.725: E/AndroidRuntime(9284): Caused by: java.lang.NoSuchMethodException: designCanvas(Context,AttributeSet)
02-08 12:43:07.725: E/AndroidRuntime(9284): at java.lang.Class.getMatchingConstructor(Class.java:643)
02-08 12:43:07.725: E/AndroidRuntime(9284): at java.lang.Class.getConstructor(Class.java:472)
02-08 12:43:07.725: E/AndroidRuntime(9284): at android.view.LayoutInflater.createView(LayoutInflater.java:480)
02-08 12:43:07.725: E/AndroidRuntime(9284): ... 21 more
NewProduct.java
public class NewProduct extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.new_product);
}
class designCanvas extends SurfaceView implements SurfaceHolder.Callback {
private drawThread _thread;
private ArrayList<GraphicObject> _graphics = new ArrayList<GraphicObject>();
public designCanvas(Context context, AttributeSet attrs) {
super(context, attrs);
getHolder().addCallback(this);
_thread = new drawThread(getHolder(), this);
setFocusable(true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
synchronized (_thread.getSurfaceHolder()) {
if (event.getAction() == MotionEvent.ACTION_UP) {
GraphicObject graphic = new GraphicObject(BitmapFactory.decodeResource(getResources(), R.drawable.circle_point));
graphic.getCoordinates().setX((int) event.getX() - graphic.getGraphic().getWidth()/2);
graphic.getCoordinates().setY((int) event.getY() - graphic.getGraphic().getHeight()/2);
_graphics.add(graphic);
}
return true;
}
}
@Override
public void onDraw(Canvas canvas) {
//Set canvas background size and colour
Path mPath = new Path();
Paint paint = new Paint();
canvas.drawColor(Color.DKGRAY);
Bitmap b = Bitmap.createBitmap(200, 200,
Bitmap.Config.ARGB_8888);
paint.setFilterBitmap(true);
Bitmap productImage = BitmapFactory.decodeResource(getResources(),R.drawable.glass_lamp);
canvas.drawBitmap(productImage, 0, 0, paint);
Canvas c = new Canvas(b);
paint.setAlpha(255); //0x80
c.translate(0, 30);
//c.drawBitmap(productImage, new Matrix(), paint);
paint.setColor(Color.BLUE);
Bitmap bitmap;
GraphicObject.Coordinates coords;
for (GraphicObject graphic : _graphics) {
//Create a graphical point indicating where the user has touched on screen.
bitmap = graphic.getGraphic();
coords = graphic.getCoordinates();
canvas.drawBitmap(bitmap, coords.getX(), coords.getY(), null);
//Create path coords points are being placed on canvas.
Log.d("Point Cords", String.valueOf(coords.getX() + " " + coords.getY()));
if (_graphics.isEmpty()) {
//_graphics array has no entries, so this is the first coord.
mPath.moveTo(coords.getX(), coords.getY());
} else {
//Record subsequent coords.
mPath.lineTo(coords.getX(), coords.getY());
}
}
}
//@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
//TODO something
}
//@Override
public void surfaceCreated(SurfaceHolder holder) {
_thread.setRunning(true);
_thread.start();
}
//@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// simply copied from sample application LunarLander:
// we have to tell thread to shut down & wait for it to finish, or else
// it might touch the Surface after we return and explode
boolean retry = true;
_thread.setRunning(false);
while (retry) {
try {
_thread.join();
retry = false;
} catch (InterruptedException e) {
// we will try it again and again...
}
}
}
}
class drawThread extends Thread {
private SurfaceHolder _surfaceHolder;
private designCanvas _panel;
private boolean _run = false;
public drawThread(SurfaceHolder surfaceHolder, designCanvas panel) {
_surfaceHolder = surfaceHolder;
_panel = panel;
}
public void setRunning(boolean run) {
_run = run;
}
public SurfaceHolder getSurfaceHolder() {
return _surfaceHolder;
}
public void run() {
Canvas c;
while (_run) {
c = null;
try {
c = _surfaceHolder.lockCanvas(null);
synchronized (_surfaceHolder) {
_panel.onDraw(c);
}
} finally {
// do this in a finally so that if an exception is thrown
// during the above, we don't leave the Surface in an
// inconsistent state
if (c != null) {
_surfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
}
class GraphicObject {
/**
* Contains the coordinates of the graphic.
*/
public class Coordinates {
private int _x = 100;
private int _y = 0;
public int getX() {
return _x + _bitmap.getWidth()/2;
}
public void setX(int value) {
_x = value - _bitmap.getWidth()/2;
}
public int getY() {
return _y + _bitmap.getHeight()/2;
}
public void setY(int value) {
_y = value - _bitmap.getHeight()/2;
}
public String toString() {
return "Coordinates: (" + _x + "/" + _y + ")";
}
}
private Bitmap _bitmap;
private Coordinates _coordinates;
public GraphicObject(Bitmap bitmap) {
_bitmap = bitmap;
_coordinates = new Coordinates();
}
public Bitmap getGraphic() {
return _bitmap;
}
public Coordinates getCoordinates() {
return _coordinates;
}
}
и, наконец, new_product.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="fill_parent" >
<view class="com.odhranlynch.interiordesigner.NewProduct$designCanvas"
android:id="@+id/surfaceView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentTop="true" />
... Code snipped ...
</RelativeLayout>
Извините за объем кода выше, это просто я интересно, где я ошибаюсь. Большое спасибо заранее :)
duplicate http://stackoverflow.com/questions/4483433/error-inflating-inner-class-view –
Вы указали активность в вашем manifest.xml? – THelper
Здравствуйте, извините, что уделили время, чтобы ответить. @THelper, да, активность указана в файле manifest.xml. – Odhran