Android 如何制作一个简单的触摸屏测试应用程序?

Android 如何制作一个简单的触摸屏测试应用程序?,android,touch,screen,Android,Touch,Screen,我想做一个简单的触摸屏测试应用程序,比如三星设备诊断工具 三星设备诊断工具的屏幕截图: 我不太熟悉Android应用程序开发。您建议我用哪种方法制作一个像我上面提到的工具一样简单的应用程序?这个应用程序的开发很容易。您需要了解: 如何获取单击的坐标 @Override public boolean onTouchEvent(MotionEvent event) { int x = (int)(event.getX()/tileSize); int y = (int)(event.

我想做一个简单的触摸屏测试应用程序,比如三星设备诊断工具

三星设备诊断工具的屏幕截图:


我不太熟悉Android应用程序开发。您建议我用哪种方法制作一个像我上面提到的工具一样简单的应用程序?

这个应用程序的开发很容易。您需要了解:

如何获取单击的坐标

@Override
public boolean onTouchEvent(MotionEvent event) {
    int x = (int)(event.getX()/tileSize);
    int y = (int)(event.getY()/tileSize);
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
        map[x][y] = true;
        break;
        case MotionEvent.ACTION_MOVE:
        case MotionEvent.ACTION_UP:
    }
return false;
}
重写方法onDraw,以绘制矩形

  private void init(){
  tileSize = 10;

  paint1 = new Paint();
  paint1.setColor(Color.BLUE);
  paint1.setStrokeWidth(10);
  paint1.setStyle(Paint.Style.STROKE);

  paint2 = new Paint();
  paint2.setColor(Color.RED);
  paint2.setStrokeWidth(10);
  paint2.setStyle(Paint.Style.STROKE);

 }

 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
for (int i = 0; i < x; i++){
    for (int j = 0; j < y; j++){
        Paint p = null; 
        if(map[i][j]){
        p=paint1;
        }else{
        p=paint2;
        }
        canvas.drawRect(i*tileSize, j*tileSize, tileSize, tileSize, paint);
    }

}
}
}
private void init(){
tileSize=10;
油漆1=新油漆();
油漆1.setColor(颜色:蓝色);
油漆1.设置行程宽度(10);
paint1.setStyle(Paint.Style.STROKE);
油漆2=新油漆();
油漆2.setColor(颜色为红色);
油漆2.设置行程宽度(10);
paint2.setStyle(Paint.Style.STROKE);
}
@凌驾
受保护的void onDraw(画布){
super.onDraw(帆布);
对于(int i=0;i
最近,我还不得不在我的应用程序中进行此屏幕测试。所以我想出了一个解决办法。我正在获取一个
RectF
数组,即
ArrayList arr=new ArrayList()
并按以下顺序绘制此
Rects

  • 左垂直线

    private void drawLeftLine(int width, int height) {
    int leftPoint = 0;
    int topPoint = 0;
    int rightPoint = 100;
    int bottomPoint = 100;
    
    int maxNoOfRect = height / 100;
    int lastRectHeight = height % 100;
    
    for (int i = 0; i < maxNoOfRect; i++) {
        arr.add(new RectF(leftPoint, topPoint, rightPoint, bottomPoint));
        topPoint = bottomPoint;
        bottomPoint = bottomPoint + 100;
    }
    
    所以,这就是解决这个问题的方法。同样的方法也会绘制对角线

    从左上到右下的对角线:

     private void drawTBDiagonalLine(int w, int h) {
    
        float height = h;
        float width = w;
        float slope = (height / width);
    
        float left = 0;
        float top = 0;
        float bottom = 100;
        float right = bottom / slope;
    
        int maxNoOfRect = h / 100;
    
        for (int i = 0; i < maxNoOfRect; i++) {
            arr.add(new RectF(left, top, right, bottom));
            left = right;
            top = bottom;
            bottom = bottom + 100;
            right = bottom / slope;
        }
    }
    
    private void drawtb对角线(int w,int h){
    浮动高度=h;
    浮动宽度=w;
    浮动坡度=(高度/宽度);
    左浮动=0;
    浮顶=0;
    浮底=100;
    右浮动=底部/坡度;
    int maxNoOfRect=h/100;
    for(int i=0;i
    您的解决方案不可用。您的github中没有可用的解决方案抱歉,我的答复太晚,但我仍然没有在我的github帐户上发布解决方案。查找解决方案??您能提供完整的解决方案吗?
         @Override
    public boolean onTouchEvent(MotionEvent event) {
        float touchX = event.getX();
        float touchY = event.getY();
    
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                if (mOnViewTouchedListener != null)
                    mOnViewTouchedListener.onViewTouched();
                Point point = new Point();
                point.x = (int) event.getX();
                point.y = (int) event.getY();
                Log.d("TAG", "point: " + point);
    
                for (int i = 0; i < arr.size(); i++) {
                    if (arr.get(i).contains(point.x, point.y)) {
                        Log.d("TAG", "Touch IN");
                        arr.remove(i);
                        invalidate();
                        break;
                    }
                }
                break;
            case MotionEvent.ACTION_MOVE:
                if (mOnViewTouchedListener != null)
                    mOnViewTouchedListener.onViewTouched();
                Log.d("TAG", "ACTION_MOVE");
                Point point1 = new Point();
                point1.x = (int) event.getX();
                point1.y = (int) event.getY();
                Log.d("TAG", "point: " + point1);
    
                for (int i = 0; i < arr.size(); i++) {
                    if (arr.get(i).contains(point1.x, point1.y)) {
                        Log.d("TAG", "Touch IN");
                        arr.remove(i);
                        invalidate();
                        break;
                    }
                }
                break;
            default:
                return false;
        }
        return true;
    }
    
     private void drawTBDiagonalLine(int w, int h) {
    
        float height = h;
        float width = w;
        float slope = (height / width);
    
        float left = 0;
        float top = 0;
        float bottom = 100;
        float right = bottom / slope;
    
        int maxNoOfRect = h / 100;
    
        for (int i = 0; i < maxNoOfRect; i++) {
            arr.add(new RectF(left, top, right, bottom));
            left = right;
            top = bottom;
            bottom = bottom + 100;
            right = bottom / slope;
        }
    }