我创建了一个从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;
}
答案 0 :(得分:1)
您在Non-Activity Class
,因此您必须参考this问题中讨论的内容。但是,由于可能的内存泄漏,建议不要传递Context。尝试使用Activity
在getResources()
内实施资源,或者如果您使用的是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);
容易且没有潜在的内存泄漏。