通过 x,y轴定位确定激活点位置
R.layout.lighticon
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imgBg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:adjustViewBounds="true"
android:scaleType="fitXY" />
<FrameLayout
android:id="@+id/layouPoints"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
</FrameLayout>
package com.welldone.home.view.lighticon;
/**
* Created by lining on 2016/7/14.
*/
public class PointSimple {
// 标记点相对于横向的宽度的比例
public double width_scale;
// 标记点相对于横向的高度的比例
public double height_scale;
// 标记点对应设备的id号
public String smart_id;
}
R.layout.lighticon_point
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/imgPoint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/lighticon_point_img" />
</LinearLayout>
package com.welldone.home.view.lighticon;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.welldone.home.R;
import java.util.ArrayList;
public class ImageLayout extends FrameLayout implements View.OnClickListener {
ArrayList<PointSimple> points;
FrameLayout layouPoints;
ImageView imgBg;
Context mContext;
public ImageLayout(Context context) {
this(context, null);
}
public ImageLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ImageLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context, attrs);
}
private void initView(Context context, AttributeSet attrs) {
mContext = context;
View imgPointLayout = inflate(context, R.layout.lighticon, this);
// 背景的图片
imgBg = (ImageView) imgPointLayout.findViewById(R.id.imgBg);
// 放激活点的容器
layouPoints = (FrameLayout) imgPointLayout.findViewById(R.id.layouPoints);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
}
public void setImgBg(int width, int height, int imgRes) {
// 背景图片的大小
ViewGroup.LayoutParams lp = imgBg.getLayoutParams();
lp.width = width;
lp.height = height;
imgBg.setLayoutParams(lp);
// 激活点的容器大小
ViewGroup.LayoutParams lp1 = layouPoints.getLayoutParams();
lp1.width = width;
lp1.height = height;
layouPoints.setLayoutParams(lp1);
Glide.with(mContext).load(imgRes).asBitmap().into(imgBg);
addPoints(width, height);
}
public void setPoints(ArrayList<PointSimple> points) {
this.points = points;
}
private void addPoints(int width, int height) {
layouPoints.removeAllViews();
for (int i = 0; i < points.size(); i++) {
double width_scale = points.get(i).width_scale;
double height_scale = points.get(i).height_scale;
LinearLayout view = (LinearLayout) LayoutInflater.from(mContext).inflate(R.layout.lighticon_point, this, false);
ImageView imageView = (ImageView) view.findViewById(R.id.imgPoint);
imageView.setTag(points.get(i).smart_id);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
animationDrawable.start();
LayoutParams layoutParams = (LayoutParams) view.getLayoutParams();
layoutParams.leftMargin = (int) (width * width_scale);
layoutParams.topMargin = (int) (height * height_scale);
imageView.setOnClickListener(this);
layouPoints.addView(view, layoutParams);
}
}
//定义一个接口对象listerner
private OnItemSelectListener listener;
//获得接口对象的方法。
public void setOnItemSelectListener(OnItemSelectListener listener) {
this.listener = listener;
}
//定义一个接口
public interface OnItemSelectListener{
public void onItemSelect(String index);
}
@Override
public void onClick(View v) {
String pos = (String) v.getTag();
//此处有增加,当屏幕被点击后,将参数传入。
if(listener!=null){
listener.onItemSelect(pos);
}
Toast.makeText(getContext(), "pos : " + pos, Toast.LENGTH_SHORT).show();
}
}
<com.welldone.home.view.lighticon.ImageLayout
android:id="@+id/layout_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true" />
@BindView(R.id.layout_content)
ImageLayout layout;
layout.setOnItemSelectListener(new ImageLayout.OnItemSelectListener() {
@Override
public void onItemSelect(String index) {
// index:点图中哪个按钮被点击了
}
});
// 添加数据
layout.setPoints(pointSimples_cur);
// 获取到外部布局给该组件提供的大小《layout的实际大小》
// 如果该组件没有将宽高设为具体的数值,别的方式很可能会取不到宽高值
// R.drawable.lighticon_bg1:组件的背景图片
ViewTreeObserver vto = layout.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
layout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int height= layout.getHeight();
int width= layout.getWidth();
layout.setImgBg(width,height,R.drawable.lighticon_bg1);
}
});