android多标记图像和设置事件onclick标记(lib SubsamplingScaleImageView)

android多标记图像和设置事件onclick标记(lib SubsamplingScaleImageView),android,marker,Android,Marker,包装试验; 导入android.graphics.Canvas; 导入android.graphics.PointF; 导入android.os.Bundle; 导入android.support.v4.app.Fragment; 导入android.view.LayoutInflater; 导入android.view.MotionEvent; 导入android.view.view; 导入android.view.ViewGroup; 导入android.widget.LinearLayou

包装试验; 导入android.graphics.Canvas; 导入android.graphics.PointF; 导入android.os.Bundle; 导入android.support.v4.app.Fragment; 导入android.view.LayoutInflater; 导入android.view.MotionEvent; 导入android.view.view; 导入android.view.ViewGroup; 导入android.widget.LinearLayout; 导入android.widget.Toast; 导入com.davemorrissey.labs.subscaleview.ImageSource; 导入java.util.ArrayList; 导入java.util.List; 导入common.PinView

public class RoomFragment extends Fragment{
    PinView imageView;
    LinearLayout layoutFooter;
    List<PointF> pinList = new ArrayList<PointF>();
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.room_fragment_layout, container, false);
        //footer action bar
        layoutFooter = (LinearLayout) rootView.findViewById(R.id.footer_room);
        layoutFooter.setVisibility(LinearLayout.INVISIBLE);
        //End footer action bar

        //image plane and pin
        imageView  = (PinView) rootView.findViewById(R.id.plane);
        imageView.setImage(ImageSource.resource(R.drawable.plane));
        imageView.setZoomEnabled(false);
        pinList.add(new PointF(100f, 1200f));
        pinList.add(new PointF(400f, 1200f));
        pinList.add(new PointF(1000f, 1200f));
        imageView.setPins(pinList);
        //imageView.setPin(new PointF(800f, 1200f));

        imageView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                layoutFooter.setVisibility(LinearLayout.INVISIBLE);
                if(motionEvent.getAction() == MotionEvent.ACTION_UP){
                    Toast.makeText(getContext(), motionEvent.getX() + " | " + motionEvent.getY(), Toast.LENGTH_SHORT).show();
                    layoutFooter.setVisibility(LinearLayout.VISIBLE);
                }
                imageView.setPin(new PointF(motionEvent.getX(), motionEvent.getY()));

                return false;
            }
        });
        //End image plane and pin
        return rootView;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

}

package common;
import android.content.Context;
import android.graphics.*;
import android.util.AttributeSet;
import android.widget.Toast;

import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;

import java.util.List;

import product.dm.com.dm.R;


public class PinView extends SubsamplingScaleImageView {

    private PointF sPin;
    private Bitmap pin;
    private List<PointF> pinList;

    public PinView(Context context) {
        this(context, null);
    }

    public PinView(Context context, AttributeSet attr) {
        super(context, attr);
        initialise();
    }

    public void setPin(PointF sPin) {
        this.sPin = sPin;
        initialise();
        invalidate();
    }

    public void setPins(List<PointF> pinList){
        this.pinList = pinList;
        initialise();
    }

    public PointF getPin() {
        return sPin;
    }

    private void initialise() {
        float density = getResources().getDisplayMetrics().densityDpi;
        pin = BitmapFactory.decodeResource(this.getResources(), R.drawable.pin_red);
        float w = (density/420f) * pin.getWidth();
        float h = (density/420f) * pin.getHeight();
        pin = Bitmap.createScaledBitmap(pin, (int)w, (int)h, true);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);


        if (!isReady()) {
            return;
        }

        Paint paint = new Paint();
        paint.setAntiAlias(true);

        if (sPin != null && pin != null) {

            PointF vPin = sourceToViewCoord(sPin);
            float vX = vPin.x - (pin.getWidth()/2);
            float vY = vPin.y - pin.getHeight();
            canvas.drawBitmap(pin, vX, vY, paint);
        }

        for(int i=0;i<pinList.size();i++){
            Paint paints = new Paint();
            paint.setAntiAlias(true);
            PointF vPin = sourceToViewCoord(pinList.get(i));
            float vX = vPin.x - (pin.getWidth()/2);
            float vY = vPin.y - pin.getHeight();
            canvas.drawBitmap(pin, vX, vY, paints);
        }

    }

}
公共类RoomFragment扩展了片段{
PinView-imageView;
线性布局布局页脚;
List pinList=新建ArrayList();
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气机。充气(R.layout.room\u fragment\u布局,容器,假);
//页脚操作栏
layoutFooter=(LinearLayout)rootView.findViewById(R.id.footer\u room);
layoutFooter.setVisibility(LinearLayout.INVISIBLE);
//结束页脚操作栏
//图像平面和引脚
imageView=(PinView)rootView.findviewbyd(R.id.plane);
setImage(ImageSource.resource(R.drawable.plane));
imageView.setZoomeEnabled(false);
添加(新的点F(100f,1200f));
添加(新的点F(400f,1200f));
添加(新的点F(1000f,1200f));
imageView.setPins(pinList);
//设置PIN(新点F(800f,1200f));
imageView.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图、运动事件、运动事件){
layoutFooter.setVisibility(LinearLayout.INVISIBLE);
if(motionEvent.getAction()==motionEvent.ACTION\u UP){
Toast.makeText(getContext(),motionEvent.getX()+“|”+motionEvent.getY(),Toast.LENGTH_SHORT).show();
layoutFooter.setVisibility(LinearLayout.VISIBLE);
}
setPin(新的PointF(motionEvent.getX(),motionEvent.getY());
返回false;
}
});
//端图像平面和引脚
返回rootView;
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
}
}
包装通用;
导入android.content.Context;
导入android.graphics.*;
导入android.util.AttributeSet;
导入android.widget.Toast;
导入com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
导入java.util.List;
import product.dm.com.dm.R;
公共类PinView扩展了子采样ScaleImageView{
私有点f自旋;
私人位图pin;
私人名单;
公共PinView(上下文){
这个(上下文,空);
}
公共PinView(上下文、属性集属性){
超级(上下文,attr);
初始化();
}
公共无效设置PIN(点F旋转){
这个旋转=旋转;
初始化();
使无效();
}
公共无效设置引脚(列表引脚列表){
this.pinList=pinList;
初始化();
}
公共点f getPin(){
回程自旋;
}
私有无效初始化(){
浮动密度=getResources().getDisplayMetrics().densityDpi;
pin=BitmapFactory.decodeResource(this.getResources(),R.drawable.pin_red);
浮子w=(密度/420f)*引脚getWidth();
浮子h=(密度/420f)*引脚高度();
pin=位图。createScaledBitmap(pin,(int)w,(int)h,true);
}
@凌驾
受保护的void onDraw(画布){
super.onDraw(帆布);
如果(!isReady()){
返回;
}
油漆=新油漆();
paint.setAntiAlias(真);
if(自旋!=null&&pin!=null){
PointF vPin=sourceToViewCoord(旋转);
float vX=vPin.x-(pin.getWidth()/2);
float vY=vPin.y-pin.getHeight();
画布.绘图位图(pin、vX、vY、绘画);
}
对于(int i=0;i