package safeluck.drive.evaluation.fragment;
|
|
import android.graphics.Bitmap;
|
import android.graphics.Canvas;
|
import android.graphics.Color;
|
import android.graphics.Paint;
|
import android.graphics.Path;
|
import android.opengl.GLSurfaceView;
|
import android.os.Bundle;
|
import android.util.Log;
|
import android.view.LayoutInflater;
|
import android.view.SurfaceHolder;
|
import android.view.SurfaceView;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.widget.LinearLayout;
|
|
import androidx.annotation.NonNull;
|
import androidx.annotation.Nullable;
|
import androidx.appcompat.widget.Toolbar;
|
|
|
import me.yokeyword.fragmentation.SupportFragment;
|
import safeluck.drive.evaluation.R;
|
|
|
/**
|
* MyApplication2
|
* Created by lzw on 2019/9/26. 15:20:58
|
* 邮箱:632393724@qq.com
|
* All Rights Saved! Chongqing AnYun Tech co. LTD
|
*/
|
public class MapFragment extends SupportFragment{
|
private boolean isDrawing = false;
|
|
public static SupportFragment newInstance(){
|
return new MapFragment();
|
}
|
private SurfaceView mSurfaceView;
|
private static final String TAG = "MapFragment";
|
private SurfaceHolder holder;
|
Path path = new Path();
|
private Canvas canvas;
|
private int x=-1;
|
private int y = -1;
|
private Toolbar toolbar;
|
|
private Bitmap bmp = null;
|
private Canvas canvas2 = null;
|
private Paint paint = null;
|
private int screen_width = 0, screen_height = 0;
|
private String osd = null;
|
private String osd2 = null;
|
private String osd3 = null;
|
|
|
private LinearLayout linearLayout;//surfaceview的父容器,为了移动surfaceview而使用,因为scrollto不能移动view,
|
|
|
@Nullable
|
@Override
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
View view = inflater.inflate(R.layout.layout_mapfragment,container,false);
|
initView(view);
|
return view;
|
}
|
|
private void initView(View view) {
|
toolbar = view.findViewById(R.id.toolbar);
|
toolbar.setTitle("简单地图");
|
toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp);
|
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
_mActivity.onBackPressed();
|
}
|
});
|
|
mSurfaceView = view.findViewById(R.id.surfaceview);
|
|
holder = mSurfaceView.getHolder();
|
|
holder.addCallback(new SurfaceHolder.Callback() {
|
@Override
|
public void surfaceCreated(SurfaceHolder surfaceHolder) {
|
Canvas canvas = surfaceHolder.lockCanvas();
|
|
if (canvas != null) {
|
Log.d(TAG, "W = " + canvas.getWidth() + " H = " + canvas.getHeight());
|
screen_width = canvas.getWidth();
|
screen_height = canvas.getHeight();
|
surfaceHolder.unlockCanvasAndPost(canvas);
|
|
bmp = Bitmap.createBitmap(screen_width, screen_height, Bitmap.Config.ARGB_8888);
|
canvas2 = new Canvas(bmp);
|
canvas2.drawColor(Color.WHITE);
|
|
paint = new Paint();
|
|
paint.setTextSize(30);
|
paint.setColor(Color.BLACK);
|
paint.setStrokeWidth(1.5f);
|
paint.setAntiAlias(true);
|
paint.setStyle(Paint.Style.STROKE);
|
|
holder.lockCanvas();
|
canvas.drawBitmap(bmp, 0, 0, paint);
|
holder.unlockCanvasAndPost(canvas);
|
}
|
|
new Thread(new NeedForSpeed()).start();
|
}
|
|
@Override
|
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
|
|
}
|
|
@Override
|
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
|
|
}
|
});
|
}
|
|
|
class NeedForSpeed implements Runnable {
|
@Override
|
public void run() {
|
double map[][] = {{1,1}, {10,1}, {10,10}, {1,10}};
|
double car[][] = {{3,3}, {8,3}, {8,8}, {3,8}};
|
|
DrawMap(map, car);
|
}
|
}
|
|
public void DrawMap(final double [][]map, final double [][]car) {
|
if (canvas2 == null || bmp == null) {
|
return;
|
}
|
_mActivity.runOnUiThread(new Runnable() {
|
@Override
|
public void run() {
|
double base_x = 100, base_y = 100;
|
double max_x = 0, min_x = 0, max_y = 0, min_y = 0;
|
|
Log.d(TAG, "DrawMap map size " + map.length + " car size " + car.length);
|
|
for (int i = 0; i < map.length; i++) {
|
if (i == 0) {
|
max_x = map[0][0];
|
min_x = map[0][0];
|
max_y = map[0][1];
|
min_y = map[0][1];
|
} else {
|
if (max_x < map[i][0]) {
|
max_x = map[i][0];
|
}
|
if (min_x > map[i][0]) {
|
min_x = map[i][0];
|
}
|
if (max_y < map[i][1]) {
|
max_y = map[i][1];
|
}
|
if (min_y > map[i][1]) {
|
min_y = map[i][1];
|
}
|
}
|
}
|
|
Log.d(TAG, "DrawMap max_x " + max_x + " max_y " + max_y + " min_x " + min_x + " min_y " + min_y);
|
|
for (int i = 0; i < car.length; i++) {
|
if (max_x < car[i][0]) {
|
max_x = car[i][0];
|
}
|
if (min_x > car[i][0]) {
|
min_x = car[i][0];
|
}
|
if (max_y < car[i][1]) {
|
max_y = car[i][1];
|
}
|
if (min_y > car[i][1]) {
|
min_y = car[i][1];
|
}
|
}
|
|
Log.d(TAG, "DrawMap max_x " + max_x + " max_y " + max_y + " min_x " + min_x + " min_y " + min_y);
|
|
long scale_x = Math.round(500 / (max_x - min_x));
|
long scale_y = Math.round(300 / (max_y - min_y));
|
|
if (scale_x >= scale_y) {
|
scale_x = scale_y;
|
} else {
|
scale_y = scale_x;
|
}
|
|
Log.d(TAG, "DrawMap scale_x " + scale_x + " scale_y " + scale_y);
|
|
canvas2.drawColor(Color.WHITE);
|
|
paint.setStyle(Paint.Style.STROKE);
|
|
Path path = new Path();
|
|
if (map.length != 9) {
|
Log.d(TAG, "DrawMap X = " + String.format("%f", (float) (base_x + (map[0][0] - min_x) * scale_x)) + " Y = " + String.format("%f", (float) (base_y + (map[0][1] - min_y) * scale_y)));
|
path.moveTo((float) (base_x + (map[0][0] - min_x) * scale_x), (float) (base_y + (map[0][1] - min_y) * scale_y));
|
for (int i = 1; i < map.length; i++) {
|
Log.d(TAG, "DrawMap to X = " + (float) (base_x + (map[i][0] - min_x) * scale_x) + " Y = "+ (float) (base_y + (map[i][1] - min_y) * scale_y));
|
path.lineTo((float) (base_x + (map[i][0] - min_x) * scale_x), (float) (base_y + (map[i][1] - min_y) * scale_y));
|
}
|
path.close();
|
} else {
|
path.moveTo((float) (base_x + (map[0][0] - min_x) * scale_x), (float) (base_y + (map[0][1] - min_y) * scale_y));
|
path.lineTo((float) (base_x + (map[8][0] - min_x) * scale_x), (float) (base_y + (map[8][1] - min_y) * scale_y));
|
|
path.moveTo((float) (base_x + (map[2][0] - min_x) * scale_x), (float) (base_y + (map[2][1] - min_y) * scale_y));
|
path.lineTo((float) (base_x + (map[1][0] - min_x) * scale_x), (float) (base_y + (map[1][1] - min_y) * scale_y));
|
|
path.moveTo((float) (base_x + (map[3][0] - min_x) * scale_x), (float) (base_y + (map[3][1] - min_y) * scale_y));
|
path.lineTo((float) (base_x + (map[4][0] - min_x) * scale_x), (float) (base_y + (map[4][1] - min_y) * scale_y));
|
|
path.moveTo((float) (base_x + (map[6][0] - min_x) * scale_x), (float) (base_y + (map[6][1] - min_y) * scale_y));
|
path.lineTo((float) (base_x + (map[5][0] - min_x) * scale_x), (float) (base_y + (map[5][1] - min_y) * scale_y));
|
|
path.moveTo((float) (base_x + (map[7][0] - min_x) * scale_x), (float) (base_y + (map[7][1] - min_y) * scale_y));
|
path.lineTo((float) (base_x + (map[8][0] - min_x) * scale_x), (float) (base_y + (map[8][1] - min_y) * scale_y));
|
}
|
canvas2.drawPath(path, paint);
|
|
path.moveTo((float) (base_x + (car[0][0] - min_x) * scale_x), (float) (base_y + (car[0][1] - min_y)*scale_y));
|
for (int i = 1; i < car.length; i++)
|
path.lineTo((float) (base_x + (car[i][0] - min_x) * scale_x), (float) (base_y + (car[i][1] - min_y)*scale_y));
|
path.close();
|
canvas2.drawPath(path, paint);
|
|
paint.setStyle(Paint.Style.FILL_AND_STROKE);
|
|
if (osd != null) {
|
Path pathText = new Path();
|
pathText.moveTo(100, 470);
|
pathText.lineTo(700, 470);
|
canvas2.drawTextOnPath(osd, pathText, 0, 0, paint);//逆时针生成
|
}
|
|
if (osd2 != null) {
|
Path pathText = new Path();
|
pathText.moveTo(10, 30);
|
pathText.lineTo(700, 30);
|
canvas2.drawTextOnPath(osd2, pathText, 0, 0, paint);//逆时针生成
|
}
|
|
// 提交画布
|
Canvas canvas = holder.lockCanvas();
|
canvas.drawBitmap(bmp, 0, 0, paint);
|
holder.unlockCanvasAndPost(canvas);
|
}
|
});
|
}
|
|
public void CCL(final int c, final int who) {
|
_mActivity.runOnUiThread(new Runnable() {
|
@Override
|
public void run() {
|
/*if (canvas2 != null && bmp != null) {
|
if (c == 0)
|
canvas2.drawColor(Color.GREEN);
|
else
|
canvas2.drawColor(Color.GRAY);
|
// 提交画布
|
Canvas canvas = holder.lockCanvas();
|
canvas.drawBitmap(bmp, 0, 0, paint);
|
holder.unlockCanvasAndPost(canvas);
|
}*/
|
// Button button;
|
// if (who == 0) {
|
// button = findViewById(R.id.sample_button);
|
// } else {
|
// button = findViewById(R.id.net_button);
|
// }
|
//
|
// if (c == 0)
|
// button.setBackgroundColor(Color.GREEN);
|
// else
|
// button.setBackgroundColor(Color.RED);
|
}
|
});
|
}
|
|
|
|
|
}
|