我如何使用android中的getResources

时间:2014-04-07 23:38:12

标签: java android android-mapview

我创建了一个从Overlay扩展的类MiOverlay。

它无法识别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;
    }

2 个答案:

答案 0 :(得分:1)

您在Non-Activity Class,因此您必须参考this问题中讨论的内容。但是,由于可能的内存泄漏,建议不要传递Context。尝试使用ActivitygetResources()内实施资源,或者如果您使用的是Fragment,请使用getActivity().getResources()...

无论如何,你最简单的选择是:

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;
}

答案 1 :(得分:1)

我不同意Luis Lavieri的回答。最简单的解决方案是使用MapView的上下文:

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

容易且没有潜在的内存泄漏。