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

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

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

package pointerlocation.ckl.com.gohitools;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.CornerPathEffect;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.SparseArray;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class PointerLocationView extends AppCompatActivity {
    private TextView touchView;
    private TextView eventlabel;
    private int StartX;
    private int StartY;
    private int StopX;
    private int StopY;
    private float historyX;
    private float historyY;
    private int historySize;
    @SuppressLint("ClickableViewAccessibility")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        if (getSupportActionBar() != null) {
            getSupportActionBar().hide();
        }
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_pointer_location_view);
        final int[] event_label_arr = new int[]{R.id.event_label0, R.id.event_label1, R.id.event_label2, R.id.event_label3,
                R.id.event_label4, R.id.event_label5, R.id.event_label6, R.id.event_label7, R.id.event_label8, R.id.event_label9};
        final int[] ColorArr = new int[]{
                Color.rgb(255, 0, 0), Color.rgb(0, 128, 0),
                Color.rgb(0, 139, 139), Color.rgb(0, 0, 255),
                Color.rgb(255, 0, 255), Color.rgb(255, 255, 0),
                Color.rgb(139, 0, 0), Color.rgb(0, 100, 0),
                Color.rgb(0, 0, 139), Color.rgb(0, 255, 0)};
        WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
        final int width = wm.getDefaultDisplay().getWidth();
        final int height = wm.getDefaultDisplay().getHeight();
        final ImageView iv = findViewById(R.id.iv);
        final Bitmap bitmap = null;
        final Bitmap bitmap1 = bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        final SparseArray<Path> mPaths = new SparseArray<>();
        final Paint paint0 = new Paint();
        paint0.setStrokeWidth(3);
        paint0.setStyle(Paint.Style.STROKE);
        paint0.setStrokeCap(Paint.Cap.ROUND);
        paint0.setStrokeJoin(Paint.Join.ROUND);
        paint0.setDither(true);
        paint0.setPathEffect(new CornerPathEffect(2));
        paint0.setColor(ColorArr[0]);
        paint0.setAntiAlias(true);
        paint0.setStrokeMiter(90);
        Paint paint1 = new Paint();
        paint1.setStrokeWidth(3);
        paint1.setStyle(Paint.Style.STROKE);
        paint1.setStrokeCap(Paint.Cap.ROUND);
        paint1.setStrokeJoin(Paint.Join.ROUND);
        paint1.setDither(true);
        paint1.setPathEffect(new CornerPathEffect(2));
        paint1.setColor(ColorArr[1]);
        paint1.setAntiAlias(true);
        paint1.setStrokeMiter(90);
        Paint paint2 = new Paint();
        paint2.setStrokeWidth(3);
        paint2.setStyle(Paint.Style.STROKE);
        paint2.setStrokeCap(Paint.Cap.ROUND);
        paint2.setStrokeJoin(Paint.Join.ROUND);
        paint2.setDither(true);
        paint2.setPathEffect(new CornerPathEffect(2));
        paint2.setColor(ColorArr[2]);
        paint2.setAntiAlias(true);
        Paint paint3 = new Paint();
        paint3.setStrokeWidth(3);
        paint3.setStyle(Paint.Style.STROKE);
        paint3.setStrokeCap(Paint.Cap.ROUND);
        paint3.setStrokeJoin(Paint.Join.ROUND);
        paint3.setDither(true);
        paint3.setPathEffect(new CornerPathEffect(2));
        paint3.setColor(ColorArr[3]);
        paint3.setAntiAlias(true);
        Paint paint4 = new Paint();
        paint4.setStrokeWidth(3);
        paint4.setStyle(Paint.Style.STROKE);
        paint4.setStrokeCap(Paint.Cap.ROUND);
        paint4.setStrokeJoin(Paint.Join.ROUND);
        paint4.setDither(true);
        paint4.setPathEffect(new CornerPathEffect(2));
        paint4.setColor(ColorArr[4]);
        paint4.setAntiAlias(true);
        Paint paint5 = new Paint();
        paint5.setStrokeWidth(3);
        paint5.setStyle(Paint.Style.STROKE);
        paint5.setStrokeCap(Paint.Cap.ROUND);
        paint5.setStrokeJoin(Paint.Join.ROUND);
        paint5.setDither(true);
        paint5.setPathEffect(new CornerPathEffect(2));
        paint5.setColor(ColorArr[5]);
        paint5.setAntiAlias(true);
        Paint paint6 = new Paint();
        paint6.setStrokeWidth(3);
        paint6.setStyle(Paint.Style.STROKE);
        paint6.setStrokeCap(Paint.Cap.ROUND);
        paint6.setStrokeJoin(Paint.Join.ROUND);
        paint6.setDither(true);
        paint6.setPathEffect(new CornerPathEffect(2));
        paint6.setColor(ColorArr[6]);
        paint6.setAntiAlias(true);
        Paint paint7 = new Paint();
        paint7.setStrokeWidth(3);
        paint7.setStyle(Paint.Style.STROKE);
        paint7.setStrokeCap(Paint.Cap.ROUND);
        paint7.setStrokeJoin(Paint.Join.ROUND);
        paint7.setDither(true);
        paint7.setPathEffect(new CornerPathEffect(2));
        paint7.setColor(ColorArr[7]);
        paint7.setAntiAlias(true);
        paint7.setStrokeMiter(90);
        Paint paint8 = new Paint();
        paint8.setStrokeWidth(3);
        paint8.setStyle(Paint.Style.STROKE);
        paint8.setStrokeCap(Paint.Cap.ROUND);
        paint8.setStrokeJoin(Paint.Join.ROUND);
        paint8.setDither(true);
        paint8.setPathEffect(new CornerPathEffect(2));
        paint8.setColor(ColorArr[8]);
        paint8.setAntiAlias(true);
        Paint paint9 = new Paint();
        paint9.setStrokeWidth(3);
        paint9.setStyle(Paint.Style.STROKE);
        paint9.setStrokeCap(Paint.Cap.ROUND);
        paint9.setStrokeJoin(Paint.Join.ROUND);
        paint9.setDither(true);
        paint9.setPathEffect(new CornerPathEffect(2));
        paint9.setColor(ColorArr[9]);
        paint9.setAntiAlias(true);
        final Paint paint = new Paint();
        paint.setStrokeWidth(4);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeCap(Paint.Cap.ROUND);
        paint.setStrokeJoin(Paint.Join.ROUND);
        paint.setDither(true);
        paint.setPathEffect(new CornerPathEffect(2));
        paint.setColor(Color.RED);
        paint.setAntiAlias(true);
        paint.setStrokeMiter(90);
        final ArrayList<Paint> paints = new ArrayList<>();
        paints.add(paint0);
        paints.add(paint1);
        paints.add(paint2);
        paints.add(paint3);
        paints.add(paint4);
        paints.add(paint5);
        paints.add(paint6);
        paints.add(paint7);
        paints.add(paint8);
        paints.add(paint9);
        final Canvas canvas = new Canvas(bitmap1);
        final Path path = new Path();
        touchView = findViewById(R.id.touch_area);
        touchView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int action = event.getActionMasked();
                switch (action) {
                    case MotionEvent.ACTION_DOWN:
                    case MotionEvent.ACTION_POINTER_DOWN:
                        int actionIndex = event.getActionIndex();
                        int PointID = event.getPointerId(actionIndex);
                        for (int i = 0; i < event.getPointerCount(); i++) {
                            int x = (int) event.getX(actionIndex);
                            int y = (int) event.getY(actionIndex);
                            eventlabel = findViewById(event_label_arr[PointID]);
                            String eventType1 = "第" + (PointID + 1) + "个手指头按下了!";
                            String msg1 = "";
                            msg1 += "Action:" + eventType1 + "  ";
                            msg1 += "相对坐标:X:" + String.valueOf(x) + ";Y:" + String.valueOf(y) + "  ";
                            eventlabel.setText(msg1);
                            Path path = new Path();
                            path.moveTo(event.getX(actionIndex), event.getY(actionIndex));
                            mPaths.append(PointID, path);
                        }
                        break;
                    case MotionEvent.ACTION_MOVE:
                        for (int i = 0; i < event.getPointerCount(); i++) {
                            PointID = event.getPointerId(i);
                            int PointIndex = event.findPointerIndex(PointID);
                            String eventType4 = "第" + (PointID + 1) + "个手指在移动";
                            eventlabel = findViewById(event_label_arr[PointID]);
                            int x = (int) event.getX(PointIndex);
                            int y = (int) event.getY(PointIndex);
                            String msg4 = "";
                            msg4 += "Action:" + eventType4 + "  ";
                            msg4 += "相对坐标:" + String.valueOf(x) + "," + String.valueOf(y) + "  ";
                            eventlabel.setText(msg4);
                            historySize = event.getHistorySize();
                            for (int j = 0; j < historySize; j++) {
                                historyX = event.getHistoricalX(PointIndex,j);
                                historyY = event.getHistoricalY(PointIndex,j);
                                Path path = mPaths.get(event.getPointerId(i));
                                path.lineTo(historyX,historyY);
                            }
                            Path path = mPaths.get(event.getPointerId(i));
                            path.lineTo(event.getX(i), event.getY(i));
                        }
                        for (int i = 0; i < mPaths.size(); i++) {
                            canvas.drawPath(mPaths.valueAt(i),paints.get(i));
                        }
                        iv.setImageBitmap(bitmap1);
                        break;
                    case MotionEvent.ACTION_POINTER_UP:
                        PointID = event.getPointerId(event.getActionIndex());
                        int PointIndex = event.findPointerIndex(PointID);
                        eventlabel = findViewById(event_label_arr[PointID]);
                        int x = (int) event.getX(PointIndex);
                        int y = (int) event.getY(PointIndex);
                        String eventType3 = "#ID=" + (PointID + 1) + "的手指离开了!";
                        String msg3 = "";
                        msg3 += "Action:" + eventType3 + "  ";
                        msg3 += "相对坐标:X:" + String.valueOf(x) + ",Y:" + String.valueOf(y) + "  ";
                        eventlabel.setText(msg3);
                        break;
                    case MotionEvent.ACTION_UP:
                        String msg2 = "手指都离开了";
                        for (int i = 0; i < event_label_arr.length; i++) {
                            eventlabel = findViewById(event_label_arr[i]);
                            eventlabel.setText(msg2);
                        }
                        break;
                }
                return true;
            }
        });
    }
}



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

package pointerlocation.ckl.com.gohitools;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.PST);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(MainActivity.this,PointerLocationView.class);
                startActivity(intent);
            }
        });
    }

}

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

下面是mainActivityLayut中的内容:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="pointerlocation.ckl.com.gohitools.PointerLocationView">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <ImageView
        android:id="@+id/iv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <TextView
        android:id="@+id/touch_area"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
    <TextView
        android:id="@+id/history_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center_vertical">
        <TextView
            android:id="@+id/event_label0"
            android:textStyle="italic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:text="请随机触摸!"
            android:gravity="center"
            android:textSize="10sp"
            android:textColor="#ff0000"/>
        <TextView
            android:id="@+id/event_label1"
            android:textStyle="italic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请随机触摸1!"
            android:gravity="top"
            android:textSize="10sp"
            android:textColor="#008000"/>
        <TextView
            android:id="@+id/event_label2"
            android:textStyle="italic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请随机触摸!"
            android:gravity="top"
            android:textSize="10sp"
            android:textColor="#008b8b"/>
        <TextView
            android:id="@+id/event_label3"
            android:textStyle="italic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请随机触摸!"
            android:gravity="top"
            android:textSize="10sp"
            android:textColor="#0000ff"/>
        <TextView
            android:id="@+id/event_label4"
            android:textStyle="italic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请随机触摸!"
            android:gravity="top"
            android:textSize="10sp"
            android:textColor="#00ffff"/>
        <TextView
            android:id="@+id/event_label5"
            android:textStyle="italic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请随机触摸!"
            android:gravity="top"
            android:textSize="10sp"
            android:textColor="#ff00ff"/>
        <TextView
            android:id="@+id/event_label6"
            android:textStyle="italic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请随机触摸!"
            android:gravity="top"
            android:textSize="10sp"
            android:textColor="#ffff00"/>
        <TextView
            android:id="@+id/event_label7"
            android:textStyle="italic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请随机触摸!"
            android:gravity="top"
            android:textSize="10sp"
            android:textColor="#8b0000"/>
        <TextView
            android:id="@+id/event_label8"
            android:textStyle="italic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请随机触摸!"
            android:gravity="top"
            android:textSize="10sp"
            android:textColor="#006400"/>
        <TextView
            android:id="@+id/event_label9"
            android:textStyle="italic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请随机触摸!"
            android:gravity="top"
            android:textSize="10sp"
            android:textColor="#00008b"/>
    </LinearLayout>

</android.support.constraint.ConstraintLayout>


 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NoSuchManException

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值