• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

安卓开发-触控检测apk的实现

武飞扬头像
NoSuchManException
帮助1

安卓开发-触控检测apk的实现
 

      在经历了这么多天的努力下,终于完成了apk的开发,说起来也是很不容易的事情,但是,完成了就好。下面附上源码,希望能帮助到有同样需求的人。

  1.  
    package pointerlocation.ckl.com.gohitools;
  2.  
     
  3.  
    import android.annotation.SuppressLint;
  4.  
    import android.content.Context;
  5.  
    import android.graphics.Bitmap;
  6.  
    import android.graphics.Canvas;
  7.  
    import android.graphics.Color;
  8.  
    import android.graphics.CornerPathEffect;
  9.  
    import android.graphics.Paint;
  10.  
    import android.graphics.Path;
  11.  
    import android.os.Bundle;
  12.  
    import android.support.v7.app.AppCompatActivity;
  13.  
    import android.util.SparseArray;
  14.  
    import android.view.MotionEvent;
  15.  
    import android.view.View;
  16.  
    import android.view.Window;
  17.  
    import android.view.WindowManager;
  18.  
    import android.widget.ImageView;
  19.  
    import android.widget.TextView;
  20.  
    import java.util.ArrayList;
  21.  
    public class PointerLocationView extends AppCompatActivity {
  22.  
        private TextView touchView;
  23.  
        private TextView eventlabel;
  24.  
        private int StartX;
  25.  
        private int StartY;
  26.  
        private int StopX;
  27.  
        private int StopY;
  28.  
        private float historyX;
  29.  
        private float historyY;
  30.  
        private int historySize;
  31.  
        @SuppressLint("ClickableViewAccessibility")
  32.  
        @Override
  33.  
        protected void onCreate(Bundle savedInstanceState) {
  34.  
            super.onCreate(savedInstanceState);
  35.  
            requestWindowFeature(Window.FEATURE_NO_TITLE);
  36.  
            if (getSupportActionBar() != null) {
  37.  
                getSupportActionBar().hide();
  38.  
            }
  39.  
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  40.  
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
  41.  
            setContentView(R.layout.activity_pointer_location_view);
  42.  
            final int[] event_label_arr = new int[]{R.id.event_label0, R.id.event_label1, R.id.event_label2, R.id.event_label3,
  43.  
                    R.id.event_label4, R.id.event_label5, R.id.event_label6, R.id.event_label7, R.id.event_label8, R.id.event_label9};
  44.  
            final int[] ColorArr = new int[]{
  45.  
                    Color.rgb(255, 0, 0), Color.rgb(0, 128, 0),
  46.  
                    Color.rgb(0, 139, 139), Color.rgb(0, 0, 255),
  47.  
                    Color.rgb(255, 0, 255), Color.rgb(255, 255, 0),
  48.  
                    Color.rgb(139, 0, 0), Color.rgb(0, 100, 0),
  49.  
                    Color.rgb(0, 0, 139), Color.rgb(0, 255, 0)};
  50.  
            WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
  51.  
            final int width = wm.getDefaultDisplay().getWidth();
  52.  
            final int height = wm.getDefaultDisplay().getHeight();
  53.  
            final ImageView iv = findViewById(R.id.iv);
  54.  
            final Bitmap bitmap = null;
  55.  
            final Bitmap bitmap1 = bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
  56.  
            final SparseArray<Path> mPaths = new SparseArray<>();
  57.  
            final Paint paint0 = new Paint();
  58.  
            paint0.setStrokeWidth(3);
  59.  
            paint0.setStyle(Paint.Style.STROKE);
  60.  
            paint0.setStrokeCap(Paint.Cap.ROUND);
  61.  
            paint0.setStrokeJoin(Paint.Join.ROUND);
  62.  
            paint0.setDither(true);
  63.  
            paint0.setPathEffect(new CornerPathEffect(2));
  64.  
            paint0.setColor(ColorArr[0]);
  65.  
            paint0.setAntiAlias(true);
  66.  
            paint0.setStrokeMiter(90);
  67.  
            Paint paint1 = new Paint();
  68.  
            paint1.setStrokeWidth(3);
  69.  
            paint1.setStyle(Paint.Style.STROKE);
  70.  
            paint1.setStrokeCap(Paint.Cap.ROUND);
  71.  
            paint1.setStrokeJoin(Paint.Join.ROUND);
  72.  
            paint1.setDither(true);
  73.  
            paint1.setPathEffect(new CornerPathEffect(2));
  74.  
            paint1.setColor(ColorArr[1]);
  75.  
            paint1.setAntiAlias(true);
  76.  
            paint1.setStrokeMiter(90);
  77.  
            Paint paint2 = new Paint();
  78.  
            paint2.setStrokeWidth(3);
  79.  
            paint2.setStyle(Paint.Style.STROKE);
  80.  
            paint2.setStrokeCap(Paint.Cap.ROUND);
  81.  
            paint2.setStrokeJoin(Paint.Join.ROUND);
  82.  
            paint2.setDither(true);
  83.  
            paint2.setPathEffect(new CornerPathEffect(2));
  84.  
            paint2.setColor(ColorArr[2]);
  85.  
            paint2.setAntiAlias(true);
  86.  
            Paint paint3 = new Paint();
  87.  
            paint3.setStrokeWidth(3);
  88.  
            paint3.setStyle(Paint.Style.STROKE);
  89.  
            paint3.setStrokeCap(Paint.Cap.ROUND);
  90.  
            paint3.setStrokeJoin(Paint.Join.ROUND);
  91.  
            paint3.setDither(true);
  92.  
            paint3.setPathEffect(new CornerPathEffect(2));
  93.  
            paint3.setColor(ColorArr[3]);
  94.  
            paint3.setAntiAlias(true);
  95.  
            Paint paint4 = new Paint();
  96.  
            paint4.setStrokeWidth(3);
  97.  
            paint4.setStyle(Paint.Style.STROKE);
  98.  
            paint4.setStrokeCap(Paint.Cap.ROUND);
  99.  
            paint4.setStrokeJoin(Paint.Join.ROUND);
  100.  
            paint4.setDither(true);
  101.  
            paint4.setPathEffect(new CornerPathEffect(2));
  102.  
            paint4.setColor(ColorArr[4]);
  103.  
            paint4.setAntiAlias(true);
  104.  
            Paint paint5 = new Paint();
  105.  
            paint5.setStrokeWidth(3);
  106.  
            paint5.setStyle(Paint.Style.STROKE);
  107.  
            paint5.setStrokeCap(Paint.Cap.ROUND);
  108.  
            paint5.setStrokeJoin(Paint.Join.ROUND);
  109.  
            paint5.setDither(true);
  110.  
            paint5.setPathEffect(new CornerPathEffect(2));
  111.  
            paint5.setColor(ColorArr[5]);
  112.  
            paint5.setAntiAlias(true);
  113.  
            Paint paint6 = new Paint();
  114.  
            paint6.setStrokeWidth(3);
  115.  
            paint6.setStyle(Paint.Style.STROKE);
  116.  
            paint6.setStrokeCap(Paint.Cap.ROUND);
  117.  
            paint6.setStrokeJoin(Paint.Join.ROUND);
  118.  
            paint6.setDither(true);
  119.  
            paint6.setPathEffect(new CornerPathEffect(2));
  120.  
            paint6.setColor(ColorArr[6]);
  121.  
            paint6.setAntiAlias(true);
  122.  
            Paint paint7 = new Paint();
  123.  
            paint7.setStrokeWidth(3);
  124.  
            paint7.setStyle(Paint.Style.STROKE);
  125.  
            paint7.setStrokeCap(Paint.Cap.ROUND);
  126.  
            paint7.setStrokeJoin(Paint.Join.ROUND);
  127.  
            paint7.setDither(true);
  128.  
            paint7.setPathEffect(new CornerPathEffect(2));
  129.  
            paint7.setColor(ColorArr[7]);
  130.  
            paint7.setAntiAlias(true);
  131.  
            paint7.setStrokeMiter(90);
  132.  
            Paint paint8 = new Paint();
  133.  
            paint8.setStrokeWidth(3);
  134.  
            paint8.setStyle(Paint.Style.STROKE);
  135.  
            paint8.setStrokeCap(Paint.Cap.ROUND);
  136.  
            paint8.setStrokeJoin(Paint.Join.ROUND);
  137.  
            paint8.setDither(true);
  138.  
            paint8.setPathEffect(new CornerPathEffect(2));
  139.  
            paint8.setColor(ColorArr[8]);
  140.  
            paint8.setAntiAlias(true);
  141.  
            Paint paint9 = new Paint();
  142.  
            paint9.setStrokeWidth(3);
  143.  
            paint9.setStyle(Paint.Style.STROKE);
  144.  
            paint9.setStrokeCap(Paint.Cap.ROUND);
  145.  
            paint9.setStrokeJoin(Paint.Join.ROUND);
  146.  
            paint9.setDither(true);
  147.  
            paint9.setPathEffect(new CornerPathEffect(2));
  148.  
            paint9.setColor(ColorArr[9]);
  149.  
            paint9.setAntiAlias(true);
  150.  
            final Paint paint = new Paint();
  151.  
            paint.setStrokeWidth(4);
  152.  
            paint.setStyle(Paint.Style.STROKE);
  153.  
            paint.setStrokeCap(Paint.Cap.ROUND);
  154.  
            paint.setStrokeJoin(Paint.Join.ROUND);
  155.  
            paint.setDither(true);
  156.  
            paint.setPathEffect(new CornerPathEffect(2));
  157.  
            paint.setColor(Color.RED);
  158.  
            paint.setAntiAlias(true);
  159.  
            paint.setStrokeMiter(90);
  160.  
            final ArrayList<Paint> paints = new ArrayList<>();
  161.  
            paints.add(paint0);
  162.  
            paints.add(paint1);
  163.  
            paints.add(paint2);
  164.  
            paints.add(paint3);
  165.  
            paints.add(paint4);
  166.  
            paints.add(paint5);
  167.  
            paints.add(paint6);
  168.  
            paints.add(paint7);
  169.  
            paints.add(paint8);
  170.  
            paints.add(paint9);
  171.  
            final Canvas canvas = new Canvas(bitmap1);
  172.  
            final Path path = new Path();
  173.  
            touchView = findViewById(R.id.touch_area);
  174.  
            touchView.setOnTouchListener(new View.OnTouchListener() {
  175.  
                @Override
  176.  
                public boolean onTouch(View v, MotionEvent event) {
  177.  
                    int action = event.getActionMasked();
  178.  
                    switch (action) {
  179.  
                        case MotionEvent.ACTION_DOWN:
  180.  
                        case MotionEvent.ACTION_POINTER_DOWN:
  181.  
                            int actionIndex = event.getActionIndex();
  182.  
                            int PointID = event.getPointerId(actionIndex);
  183.  
                            for (int i = 0; i < event.getPointerCount(); i ) {
  184.  
                                int x = (int) event.getX(actionIndex);
  185.  
                                int y = (int) event.getY(actionIndex);
  186.  
                                eventlabel = findViewById(event_label_arr[PointID]);
  187.  
                                String eventType1 = "第" (PointID 1) "个手指头按下了!";
  188.  
                                String msg1 = "";
  189.  
                                msg1 = "Action:" eventType1 "  ";
  190.  
                                msg1 = "相对坐标:X:" String.valueOf(x) ";Y:" String.valueOf(y) "  ";
  191.  
                                eventlabel.setText(msg1);
  192.  
                                Path path = new Path();
  193.  
                                path.moveTo(event.getX(actionIndex), event.getY(actionIndex));
  194.  
                                mPaths.append(PointID, path);
  195.  
                            }
  196.  
                            break;
  197.  
                        case MotionEvent.ACTION_MOVE:
  198.  
                            for (int i = 0; i < event.getPointerCount(); i ) {
  199.  
                                PointID = event.getPointerId(i);
  200.  
                                int PointIndex = event.findPointerIndex(PointID);
  201.  
                                String eventType4 = "第" (PointID 1) "个手指在移动";
  202.  
                                eventlabel = findViewById(event_label_arr[PointID]);
  203.  
                                int x = (int) event.getX(PointIndex);
  204.  
                                int y = (int) event.getY(PointIndex);
  205.  
                                String msg4 = "";
  206.  
                                msg4 = "Action:" eventType4 "  ";
  207.  
                                msg4 = "相对坐标:" String.valueOf(x) "," String.valueOf(y) "  ";
  208.  
                                eventlabel.setText(msg4);
  209.  
                                historySize = event.getHistorySize();
  210.  
                                for (int j = 0; j < historySize; j ) {
  211.  
                                    historyX = event.getHistoricalX(PointIndex,j);
  212.  
                                    historyY = event.getHistoricalY(PointIndex,j);
  213.  
                                    Path path = mPaths.get(event.getPointerId(i));
  214.  
                                    path.lineTo(historyX,historyY);
  215.  
                                }
  216.  
                                Path path = mPaths.get(event.getPointerId(i));
  217.  
                                path.lineTo(event.getX(i), event.getY(i));
  218.  
                            }
  219.  
                            for (int i = 0; i < mPaths.size(); i ) {
  220.  
                                canvas.drawPath(mPaths.valueAt(i),paints.get(i));
  221.  
                            }
  222.  
                            iv.setImageBitmap(bitmap1);
  223.  
                            break;
  224.  
                        case MotionEvent.ACTION_POINTER_UP:
  225.  
                            PointID = event.getPointerId(event.getActionIndex());
  226.  
                            int PointIndex = event.findPointerIndex(PointID);
  227.  
                            eventlabel = findViewById(event_label_arr[PointID]);
  228.  
                            int x = (int) event.getX(PointIndex);
  229.  
                            int y = (int) event.getY(PointIndex);
  230.  
                            String eventType3 = "#ID=" (PointID 1) "的手指离开了!";
  231.  
                            String msg3 = "";
  232.  
                            msg3 = "Action:" eventType3 "  ";
  233.  
                            msg3 = "相对坐标:X:" String.valueOf(x) ",Y:" String.valueOf(y) "  ";
  234.  
                            eventlabel.setText(msg3);
  235.  
                            break;
  236.  
                        case MotionEvent.ACTION_UP:
  237.  
                            String msg2 = "手指都离开了";
  238.  
                            for (int i = 0; i < event_label_arr.length; i ) {
  239.  
                                eventlabel = findViewById(event_label_arr[i]);
  240.  
                                eventlabel.setText(msg2);
  241.  
                            }
  242.  
                            break;
  243.  
                    }
  244.  
                    return true;
  245.  
                }
  246.  
            });
  247.  
        }
  248.  
    }
学新通



注释比较多,嫌麻烦都给他删掉了。
本来实现的方式就是最笨的方式,如果大家有更好的实现办法,希望能共同讨论。      
              
下面是mainActivity里面的内容:

  1.  
    package pointerlocation.ckl.com.gohitools;
  2.  
     
  3.  
    import android.content.Intent;
  4.  
    import android.support.v7.app.AppCompatActivity;
  5.  
    import android.os.Bundle;
  6.  
    import android.view.View;
  7.  
    import android.widget.Button;
  8.  
     
  9.  
    public class MainActivity extends AppCompatActivity {
  10.  
     
  11.  
    @Override
  12.  
    protected void onCreate(Bundle savedInstanceState) {
  13.  
    super.onCreate(savedInstanceState);
  14.  
    setContentView(R.layout.activity_main);
  15.  
    Button button = findViewById(R.id.PST);
  16.  
    button.setOnClickListener(new View.OnClickListener() {
  17.  
    @Override
  18.  
    public void onClick(View v) {
  19.  
    Intent intent = new Intent();
  20.  
    intent.setClass(MainActivity.this,PointerLocationView.class);
  21.  
    startActivity(intent);
  22.  
    }
  23.  
    });
  24.  
    }
  25.  
     
  26.  
    }
学新通

写了这么多天,就这么短短的一些,发现开发确实不易。

下面是mainActivityLayut中的内容:

  1.  
    <?xml version="1.0" encoding="utf-8"?>
  2.  
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.  
    xmlns:app="http://schemas.android.com/apk/res-auto"
  4.  
    xmlns:tools="http://schemas.android.com/tools"
  5.  
    android:layout_width="match_parent"
  6.  
    android:layout_height="match_parent"
  7.  
    tools:context="pointerlocation.ckl.com.gohitools.PointerLocationView">
  8.  
    <TextView
  9.  
    android:layout_width="wrap_content"
  10.  
    android:layout_height="wrap_content"/>
  11.  
     
  12.  
    <ImageView
  13.  
    android:id="@ id/iv"
  14.  
    android:layout_width="match_parent"
  15.  
    android:layout_height="match_parent" />
  16.  
    <TextView
  17.  
    android:id="@ id/touch_area"
  18.  
    android:layout_width="match_parent"
  19.  
    android:layout_height="match_parent"
  20.  
    />
  21.  
    <TextView
  22.  
    android:id="@ id/history_label"
  23.  
    android:layout_width="wrap_content"
  24.  
    android:layout_height="wrap_content"
  25.  
    />
  26.  
    <LinearLayout
  27.  
    android:layout_width="match_parent"
  28.  
    android:layout_height="match_parent"
  29.  
    android:orientation="vertical"
  30.  
    android:gravity="center_vertical">
  31.  
    <TextView
  32.  
    android:id="@ id/event_label0"
  33.  
    android:textStyle="italic"
  34.  
    android:layout_width="wrap_content"
  35.  
    android:layout_height="wrap_content"
  36.  
    android:orientation="vertical"
  37.  
    android:text="请随机触摸!"
  38.  
    android:gravity="center"
  39.  
    android:textSize="10sp"
  40.  
    android:textColor="#ff0000"/>
  41.  
    <TextView
  42.  
    android:id="@ id/event_label1"
  43.  
    android:textStyle="italic"
  44.  
    android:layout_width="wrap_content"
  45.  
    android:layout_height="wrap_content"
  46.  
    android:text="请随机触摸1!"
  47.  
    android:gravity="top"
  48.  
    android:textSize="10sp"
  49.  
    android:textColor="#008000"/>
  50.  
    <TextView
  51.  
    android:id="@ id/event_label2"
  52.  
    android:textStyle="italic"
  53.  
    android:layout_width="wrap_content"
  54.  
    android:layout_height="wrap_content"
  55.  
    android:text="请随机触摸!"
  56.  
    android:gravity="top"
  57.  
    android:textSize="10sp"
  58.  
    android:textColor="#008b8b"/>
  59.  
    <TextView
  60.  
    android:id="@ id/event_label3"
  61.  
    android:textStyle="italic"
  62.  
    android:layout_width="wrap_content"
  63.  
    android:layout_height="wrap_content"
  64.  
    android:text="请随机触摸!"
  65.  
    android:gravity="top"
  66.  
    android:textSize="10sp"
  67.  
    android:textColor="#0000ff"/>
  68.  
    <TextView
  69.  
    android:id="@ id/event_label4"
  70.  
    android:textStyle="italic"
  71.  
    android:layout_width="wrap_content"
  72.  
    android:layout_height="wrap_content"
  73.  
    android:text="请随机触摸!"
  74.  
    android:gravity="top"
  75.  
    android:textSize="10sp"
  76.  
    android:textColor="#00ffff"/>
  77.  
    <TextView
  78.  
    android:id="@ id/event_label5"
  79.  
    android:textStyle="italic"
  80.  
    android:layout_width="wrap_content"
  81.  
    android:layout_height="wrap_content"
  82.  
    android:text="请随机触摸!"
  83.  
    android:gravity="top"
  84.  
    android:textSize="10sp"
  85.  
    android:textColor="#ff00ff"/>
  86.  
    <TextView
  87.  
    android:id="@ id/event_label6"
  88.  
    android:textStyle="italic"
  89.  
    android:layout_width="wrap_content"
  90.  
    android:layout_height="wrap_content"
  91.  
    android:text="请随机触摸!"
  92.  
    android:gravity="top"
  93.  
    android:textSize="10sp"
  94.  
    android:textColor="#ffff00"/>
  95.  
    <TextView
  96.  
    android:id="@ id/event_label7"
  97.  
    android:textStyle="italic"
  98.  
    android:layout_width="wrap_content"
  99.  
    android:layout_height="wrap_content"
  100.  
    android:text="请随机触摸!"
  101.  
    android:gravity="top"
  102.  
    android:textSize="10sp"
  103.  
    android:textColor="#8b0000"/>
  104.  
    <TextView
  105.  
    android:id="@ id/event_label8"
  106.  
    android:textStyle="italic"
  107.  
    android:layout_width="wrap_content"
  108.  
    android:layout_height="wrap_content"
  109.  
    android:text="请随机触摸!"
  110.  
    android:gravity="top"
  111.  
    android:textSize="10sp"
  112.  
    android:textColor="#006400"/>
  113.  
    <TextView
  114.  
    android:id="@ id/event_label9"
  115.  
    android:textStyle="italic"
  116.  
    android:layout_width="wrap_content"
  117.  
    android:layout_height="wrap_content"
  118.  
    android:text="请随机触摸!"
  119.  
    android:gravity="top"
  120.  
    android:textSize="10sp"
  121.  
    android:textColor="#00008b"/>
  122.  
    </LinearLayout>
  123.  
     
  124.  
    </android.support.constraint.ConstraintLayout>
学新通


 

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcaece
系列文章
更多 icon
同类精品
更多 icon
继续加载