android多标记图像和设置事件onclick标记(lib SubsamplingScaleImageView)
包装试验; 导入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.PinViewandroid多标记图像和设置事件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
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