我想显示图像(包括滚动和缩放功能)。 另外,我需要动态地为图像添加一些叠加层。叠加层与图像中的内容有关系。
换句话说:我想用一些标记来实现Map,但我提供了自己的地图材料。
我的主要问题是:我怎么能这样做?
到目前为止我尝试了什么
问题
我的问题是否有简单的解决方案或方法?
在Android中运行时添加和移动视图的正确方法是什么? (通常,我会使用基本布局并使用边距 - 这是最佳做法吗?)
请有人指出我正确的方向。
最小。 API等级:10
答案 0 :(得分:3)
我建议扩展View
类并覆盖onDraw
方法。
看看Canvas API。
你可能有一个看起来像这样的onDraw方法:
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.translate(mPosX, mPosY); //position of your actual data
canvas.scale(mScaleFactor, mScaleFactor); // zoom factor
map.draw(canvas); //you draw your map here
canvas.restore(); //go back to saved state
//for each marker you have, do the same "save - translate - scale - draw" loop
}
由于您不需要缩放标记,因此您可能不需要缩放步骤,但需要正确计算它们的位置。
根据您的#个对象等,您可能需要更优化的方式来绘制标记(例如,仅重新绘制已更改的矩形区域)。见View.invalidate(Rect)
答案 1 :(得分:1)
答案 2 :(得分:1)
您是否尝试过子类化View并处理自己的用户手势?这是我复杂行为的首选。看起来应该是这样的:
关于StackOverflow上这些单独任务的大量资料,请告诉我您是否需要其中任何一个的adittional帮助。
答案 3 :(得分:1)
答案 4 :(得分:1)
经过很长一段时间,我找到了解决方案的确切答案:TileView
设置地图视图
@Override
protected void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
TileView tileView = new TileView( this );
tileView.setSize( 2000, 3000 ); // the original size of the untiled image
tileView.addDetailLevel( 1f, "tile-%d-%d.png");
setContentView( tileView );
}
添加标记
tileView.addMarker( someView, 250, 500, -0.5f, -1.0f );
文档中的代码。