Java 如何在ImageView Android上添加标记/Pin?
我想询问如何在imageView上实现或添加标记。 我使用svglib渲染了一个SVG,并使用了customImageView,这样我就可以缩放和平移图像 这是我如何使用customImageView的代码Java 如何在ImageView Android上添加标记/Pin?,java,android,imageview,android-canvas,marker,Java,Android,Imageview,Android Canvas,Marker,我想询问如何在imageView上实现或添加标记。 我使用svglib渲染了一个SVG,并使用了customImageView,这样我就可以缩放和平移图像 这是我如何使用customImageView的代码 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { SVG svg;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
SVG svg;
switch (mNum) {
case 1:
svg = SVGParser.getSVGFromResource(getResources(), R.raw.t1);
break;
case 2:
svg = SVGParser.getSVGFromResource(getResources(), R.raw.t2);
break;
case 3:
svg = SVGParser.getSVGFromResource(getResources(), R.raw.t3);
break;
case 4:
svg = SVGParser.getSVGFromResource(getResources(), R.raw.t4);
break;
default:
svg = SVGParser.getSVGFromResource(getResources(),
R.raw.android);
}
View v = inflater.inflate(R.layout.hello_world, container, false);
View tv = v.findViewById(R.id.text);
imageView = (GestureImageView) v.findViewById(R.id.imageView1);
imageView.setStrict(false);
imageView.setStartingScale(lastScale);
// if(lastXPosition!=0 && lastYPosition!=0)
imageView.setStartingPosition(lastXPosition, lastYPosition);
// Log.i("tag",
// "lastXPosition" + lastXPosition);
// Log.i("tag",
// "lastYPosition" + lastYPosition);
// Log.i("tag",
// "lastScale" + lastScale);
// imageView.setRotation(45);
// imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
if (Build.VERSION.SDK_INT > 15)
imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
imageView.setImageDrawable(svg.createPictureDrawable());
((TextView) tv).setText("Floor number: " + mNum);
imageView.setBackgroundColor(Color.WHITE);
// tv.setBackgroundDrawable(getResources().getDrawable(
// android.R.drawable.gallery_thumb));
// imageView.setScaleType(ScaleType.CENTER);
// ((GestureImageView)imageView).setScale(x);
return v;
}
现在我想添加一个pin,就像下面的图片一样
(来源:) 但我的问题是,当我在标记周围平移时,我添加的标记没有与图像SVG绑定,因此在平移时留在某个位置 这是我的密码。。。 注:尚未定稿。。。我仍然在寻找一种方法来让这个工作,我正在使用放大的imageview作为地图
@Override
protected void onDraw(Canvas canvas) {
if (layout) {
if (drawable != null && !isRecycled()) {
canvas.save();
float adjustedScale = scale * scaleAdjust;
canvas.translate(x, y);
if (rotation != 0.0f) {
canvas.rotate(rotation);
}
if (adjustedScale != 1.0f) {
canvas.scale(adjustedScale, adjustedScale);
}
drawable.draw(canvas);
canvas.restore();
}
if (drawLock.availablePermits() <= 0) {
drawLock.release();
}
}
// ---add the marker---
Bitmap marker = BitmapFactory.decodeResource(getResources(),
R.drawable.search_marker_icon);
canvas.drawBitmap(marker, 40, 40, null);
Paint mPaint = new Paint();
mPaint.setColor(Color.RED);
canvas.drawCircle(60, 60, 5, mPaint);
super.onDraw(canvas);
}
@覆盖
受保护的void onDraw(画布){
如果(布局){
if(drawable!=null&!isRecycled()){
canvas.save();
浮动调整比例=比例*比例公正;
canvas.translate(x,y);
如果(旋转!=0.0f){
画布。旋转(旋转);
}
如果(调整后的刻度!=1.0f){
画布.比例(adjustedScale,adjustedScale);
}
可绘制。绘制(画布);
canvas.restore();
}
如果(drawLock.availablePermits()Android视图中类似HTML映射元素的实现:
- 在布局中支持图像作为可绘制或位图
- 允许使用xml格式的区域标记列表
- 允许使用剪切和粘贴HTML区域标记到资源xml(即,能够获取HTML地图和图像,并以最少的编辑使用它)
- 如果图像大于设备屏幕,则支持平移
- 支持收缩缩放
- 当一个区域被点击时支持回调
- 支持将注释显示为气泡文本,并在点击气泡时提供回调
尝试此链接,您将发现您的解决方案可绘制。绘制(画布);
//---添加标记---
位图标记=BitmapFactory.decodeResource(getResources(),
R.可绘制。搜索(标记图标);
drawBitmap(marker,40,40,null);
Paint mPaint=新油漆();
mPaint.setColor(Color.RED);
画布.画圈(60,60,5,mPaint);
canvas.restore();
}
if(drawLock.availablePermits()这是一个很好的用于显示图像的库,它支持缩放/平移和在图像上添加图钉
还没有……我目前正在处理程序的某些部分……我会在找到答案后发布答案solution@dicenice你有解决方案吗?我也有同样的问题(我想像这样实现同样的问题)@dicenice你是如何将infoWindow
添加到这个标记的?你能像这样发送示例项目吗?因为我也想将pinmark图像添加到楼层平面图中..请帮助我。@dicenice我需要你的帮助兄弟。我确实需要同样的功能,但是当我缩放图像标记位置时发生了变化。你能帮助我吗?我需要你的帮助'如果你能发布更多与此相关的代码,那将是一个很大的帮助。特别是GestureImageView类。我一直试图找到解决此问题的方法。因此,请提供帮助。bro你能帮助我解决这个问题吗?我如何向SubsampleScaleImageView对象添加接点?请查看他提供的PinView示例。这是最好的示例之一我找到的图书馆,谢谢@signed指出!
drawable.draw(canvas);
// ---add the marker---
Bitmap marker = BitmapFactory.decodeResource(getResources(),
R.drawable.search_marker_icon);
canvas.drawBitmap(marker, 40, 40, null);
Paint mPaint = new Paint();
mPaint.setColor(Color.RED);
canvas.drawCircle(60, 60, 5, mPaint);
canvas.restore();
}
if (drawLock.availablePermits() <= 0) {
drawLock.release();
}
}
super.onDraw(canvas);
}