| | |
| | | //package safeluck.drive.evaluation.fragment; |
| | | 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); |
| | | // } |
| | | // |
| | | //import android.graphics.Canvas; |
| | | //import android.graphics.Color; |
| | | //import android.graphics.Paint; |
| | | //import android.graphics.Path; |
| | | //import android.graphics.PathDashPathEffect; |
| | | //import android.graphics.Rect; |
| | | //import android.graphics.RectF; |
| | | //import android.opengl.GLSurfaceView; |
| | | //import android.os.Bundle; |
| | | //import android.support.annotation.NonNull; |
| | | //import android.support.annotation.Nullable; |
| | | //import android.support.v7.widget.Toolbar; |
| | | //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 javax.security.auth.login.LoginException; |
| | | // |
| | | //import me.yokeyword.fragmentation.SupportFragment; |
| | | //import safeluck.drive.evaluation.R; |
| | | ////import safeluck.drive.evaluation.render.GLRender; |
| | | // |
| | | // |
| | | ///** |
| | | // * 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 GLSurfaceView mGLSurfaceView; |
| | | // private static final String TAG = "MapFragment"; |
| | | // private SurfaceHolder holder; |
| | | // Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); |
| | | // Path path = new Path(); |
| | | // private Canvas canvas; |
| | | // private int x=-1; |
| | | // private int y = -1; |
| | | // private Toolbar toolbar; |
| | | // |
| | | // 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("简单地图"); |
| | | // |
| | | // mGLSurfaceView = view.findViewById(R.id.glsurface); |
| | | // mGLSurfaceView.setRenderer(new GLRender()); |
| | | // } |
| | | // |
| | | // |
| | | // |
| | | //} |
| | | // if (c == 0) |
| | | // button.setBackgroundColor(Color.GREEN); |
| | | // else |
| | | // button.setBackgroundColor(Color.RED); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |