点击图片中不规则图形提示选中不同区域

本文介绍如何创建一个交互式楼层图导航视图,该视图能够响应触摸事件并显示不同区域的提示信息。通过使用Bitmap数组和自定义View类,实现背景图与楼层图的无缝叠加,确保在所有图片重叠时呈现完整且一致的图像效果。通过设置监听器,可以获取用户点击的楼层区域编号,从而提供精准的交互体验。

如图所示,当点击不同区域做出不同提示
首先制作背景图,然后将不同区域的图片单独截取下来,截取的楼层图必须和背景相同大,保证当所有图片重叠是是一样完整的图片
背景图:

楼层图:


package com.bitcare.view;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class NavMapView extends View {

	private Bitmap[] mBitmaps;
	private OnClickBitmapListener clickBitmapListener;

	public NavMapView(Context context) {
		super(context);
	}

	public NavMapView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	/**
	 * 设置图片
	 * @author yubin
	 * @date 2013-10-12
	 */
	public final void setBitmaps(Bitmap[] bitmap) {
		this.mBitmaps = bitmap;
		invalidate();
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		if (mBitmaps != null) {
			for (int i = 0; i < mBitmaps.length; i++) {
				canvas.drawBitmap(mBitmaps[i], 0, 0, null);
			}
		}
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		if (event.getAction() == MotionEvent.ACTION_DOWN) {
			which(event.getX(), event.getY());
		}
		return true;
	}

	public void which(float x, float y) {
		if (mBitmaps != null) {
			for (int i = 0; i < mBitmaps.length; i++) {
				// 判断坐标点不超过图片得宽高
				if ((int) x > mBitmaps[0].getWidth() || (int) y > mBitmaps[0].getHeight()) {
					clickBitmapListener.ClickBitmap(-1);
					break;
				}
				Bitmap mBitmap = mBitmaps[i];
				// 判断坐标点是否是在图片得透明区域
				if (mBitmap.getPixel((int) x, (int) y) != 0) {
					clickBitmapListener.ClickBitmap(i);
					break;
				}
			}
		}
	}

	public final void setOnClickBitmapListener(OnClickBitmapListener listener) {
		this.clickBitmapListener = listener;
	};

	public static interface OnClickBitmapListener {
		/**
		 * @param index -1表示超出范围
		 * @author yubin
		 * @date 2013-10-12
		 */
		void ClickBitmap(int index);
	}
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://my.oschina.net/u/2406628/blog/473328

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值