2014-04-07 6 views
0

오버레이에서 확장 한 클래스 MiOverlay를 만들었습니다.android에서 getResources를 사용하는 방법

그리고 getResources 메소드를 인식하지 못합니다. 어떻게해야합니까? 여기에 내 수업

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Point; 
import android.location.Location; 

import com.google.android.maps.MapView; 
import com.google.android.maps.GeoPoint; 
import com.google.android.maps.Overlay; 


public class MiOverlay extends Overlay { 
    GeoPoint point; 

    public MiOverlay(GeoPoint point) 
    { 
     super(); 
     this.point = point; 
    } 

    @Override 
    public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when){ 
     super.draw(canvas, mapView, shadow); 
     Point scrnPoint = new Point(); 
     mapView.getProjection().toPixels(this.point, scrnPoint); 
     Bitmap marker = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
     canvas.drawBitmap(marker, scrnPoint.x - marker.getWidth()/2, scrnPoint.y - marker.getHeight() /2 , null); 
     return true; 
    } 
+1

리소스를 참조 할 때 컨텍스트가 필요하다고 생각합니다. – zgc7009

답변

1

나는 루이스 Lavieri의 대답에 동의하지 않는다. 가장 쉬운 해결책은 MapView의 컨텍스트를 사용하는 것입니다.

Bitmap marker = BitmapFactory.decodeResource(mapView.getContext().getResources(), R.drawable.ic_launcher); 

쉽게 메모리 누수가 발생하지 않습니다.

1

당신이 this 질문에 설명되어 있습니다 무엇을 참조해야합니다, 그래서 당신은 Non-Activity Class에의 전체 코드입니다. 그러나 가능한 메모리 누수로 인해 컨텍스트를 전달하는 것은 권장되지 않습니다. 어쨌든 getActivity().getResources()...

를 사용하여 ActivitygetResources()를 사용하거나 Fragment의를 사용하는 경우 내에서 자원을 구현하려고, 당신의 가장 쉬운 방법은 다음과 같습니다

private Context context; 
public MiOverlay(GeoPoint point, Context _context) 
{ 
    super(); 
    this.point = point; 
    context = _context; 
} 

@Override 
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when){ 
    super.draw(canvas, mapView, shadow); 
    Point scrnPoint = new Point(); 
    mapView.getProjection().toPixels(this.point, scrnPoint); 
    Bitmap marker = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher); 
    canvas.drawBitmap(marker, scrnPoint.x - marker.getWidth()/2, scrnPoint.y - marker.getHeight() /2 , null); 
    return true; 
} 
관련 문제