마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

서피스뷰 예제 따라했는데 몇개의 클래스함수에 에러가 납니다.

0 추천
public class ReDraw1 extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_re_draw1);
    }
 
    class MyView extends View {
    ArrayList<Vertex> Picture;
   
    public MyView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.re_draw1, menu);
        return true;
    }
    
    public void onDraw(Canvas canvas) {
    Paint Pnt = new Paint();
   
    LinearGradient lshader = new LinearGradient(0, 0, 480, 0, Color.DKGRAY, Color.LTGRAY, TileMode.REPEAT);
    Pnt.setShader(lshader);
    canvas.drawRect(0, 0, getWidth(), getHeight(), Pnt);
    Pnt.setShader(null);
   
    Pnt.setStyle(Paint.Style.STROKE);
    Pnt.setStrokeWidth(2);
    Pnt.setColor(0x80ff0000);
    for (int x = 0; x < 7; x++) {
    for (int y = 0; y < 7; y++) {
    Path path = new Path();
    path.moveTo(x*70, y*70);
    for (int dis = 32; dis > 1; dis--) {
    switch (dis % 4) {
    case 0:
    path.rLineTo(dis*2, 0);
    break;
    case 3:
    path.rLineTo(0, dis*2);
    break;
    case 2:
    path.rLineTo(-dis*2, 0);
    break;
    case 1:
    path.rLineTo(0, -dis*2);
    break;
    }
    }
   
    canvas.drawPath(path, Pnt);
    }
    }
   
    Pnt.setColor(Color.BLACK);
    Pnt.setStrokeWidth(3);
    Pnt.setAntiAlias(true);
    for (int i = 0; i < Picture.size(); i++) {
    if ( Picture.get(i).Draw ) {
    canvas.drawLine(Picture.get(i-1).x, Picture.get(i-1).y, Picture.get(i).x, Picture.get(i).y, Pnt);
    }
    }
    }
 
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Picture.add(new Vertex(event.getX(), event.getY(), true));
invalidate();
return true;
}
 
return false;
}
    
    
}
 
package com.example.redraw1;
 
public class Vertex {
 
float x;
float y;
boolean Draw;
 
Vertex(float ax, float ay, boolean ad) {
x = ax;
y = ay;
Draw = ad;
}
}
 

책에 있는 예제를 그대로 쳤는데 getWidth(), getHeight(), Picture.size(), Picture.get(), Picture.add(), invalidate()

 

클래스 정의를 보면 분명 존재하는 함수같은데 막상 .찍어보면 목록에 나오질 않구..

 

어떻게 해결해야 되는지 알려주시면 감사하겠습니다!

emerald (760 포인트) 님이 2014년 8월 6일 질문

2개의 답변

0 추천
 
채택된 답변
Activity 에는 getWidth() 함수 없어요.

onDraw 함수를 MyView  클래스 안으로 집어넣어야할것 같은 강한 냄새가 나네요
Gioskhan (12,060 포인트) 님이 2014년 8월 6일 답변
emerald님이 2014년 8월 6일 채택됨
답변 감사합니다 덕분에 해결됐네요..^^
0 추천
package com.example.redraw1;
 
import java.util.ArrayList;
 
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Picture;
import android.graphics.Shader.TileMode;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
 
글자수제한때매 여기다가 덧붙입니다.
emerald (760 포인트) 님이 2014년 8월 6일 답변
...