Android LCD触控检测

下面给一个Android 设备LCD触控识别度测试,也是过去看过美国一个客户的设备是如此检测,这里给出一个近似的demo:

 

里面需要注意两个地方:

其中 40是设置绘制框型的边长,这个可以自行设置;

另外一个72是Y轴的校验值,即去掉标题栏,如果隐藏标题栏,就不需要将当前获得的值mGetY减去72了.

再就是android:左右是X方向,上下是Y方向,默认左上角是坐标[0,0],不设置相对坐标就不可能又负值.

package com.example.testsurfaceviewactivity;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;

@SuppressLint("NewApi")
public class TouchScreenActivity extends Activity{

    private int mScreenWidth,mScreenHeight;
    private int mWidth,mHeight;
    private int mCounterWidth;
    private int mRow,r,mCol,c;
    private int mSelRow,mSelCol;
    private float mGetX,mGetY;
    private DrawCanvas drv;
    
    private int[][] mInArr=new int[20][30];
    
    @Override
    public void finish() {
        // TODO Auto-generated method stub
        super.finish();
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        // TODO Auto-generated method stub

        return true;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getActionBar().setDisplayHomeAsUpEnabled(true);
        
        
        DisplayMetrics metric = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metric);
        
        mScreenWidth = metric.widthPixels;     // 屏幕宽度(像素)
        mScreenHeight = metric.heightPixels;   // 
        
        //480-800
        Log.i("LCD","screen width : " + this.mScreenWidth
                +" // screen height : " + this.mScreenHeight);
        
        mWidth=0;
        mHeight=0;
        mCounterWidth=40;//pixel
        mGetX=0;
        mGetY=0;
        
        mRow=(int)(mScreenWidth/mCounterWidth);//480/40=12
        mCol=(int)(mScreenHeight/mCounterWidth);//800/40=20
        
        
        for(c=0;c<mCol;c++){
            for(r=0;r<mCol;r++){
                mInArr[r][c]=1;
            }
        }
        
        
        drv=new DrawCanvas(this);
        
        this.setContentView(drv);
        
    }

    @Override
    public View onCreateView(String name, Context context, AttributeSet attrs) {
        // TODO Auto-generated method stub
        return super.onCreateView(name, context, attrs);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        Log.i("position","x: "+event.getX()+" Y : " + event.getY());
        
        mGetX=event.getX();
        mGetY=event.getY();
        
        drv.invalidate();
        
        return true;
    }

    public class DrawCanvas extends View{

        private Paint mPaint= new Paint();
        
        public DrawCanvas(Context context) {
            super(context);
            // TODO Auto-generated constructor stub
        }

        @Override
        protected void onDraw(Canvas canvas) {
            // TODO Auto-generated method stub
            super.onDraw(canvas);
            
            mScreenWidth=canvas.getWidth();
            mScreenHeight=canvas.getHeight();
            mRow=(int)(mScreenWidth/mCounterWidth);//480/40=12
            mCol=(int)(mScreenHeight/mCounterWidth);//800/40=20
            
            Log.i("LCD canvas","screen width : " + mScreenWidth
                    +" // screen height : " + mScreenHeight);
            
            
            for(c=0;c<mCol;c++){
                if(mGetY-72<c*mCounterWidth){
                    Log.i("SEL","select colume : "+c);
                    mSelCol=c-1;
                    if(mSelCol<0){
                        mSelCol=0;
                    }
                    break;
                }
            }
            
            for(r=0;r<mRow;r++){
                if(mGetX<r*mCounterWidth){
                    Log.i("SEL","select row : "+r);
                    mSelRow=r-1;
                    if(mSelRow<0){
                        mSelRow=0;
                    }
                    break;
                }
            }
            if(mGetY!=0){
                mInArr[mSelRow][mSelCol]=0;
            }
            
            for(c=0;c<mCol;c++){
                for(r=0;r<mRow;r++){
                    
                    Log.i("P","c : "+c+" r : "+r+"value : "+ mInArr[r][c]);
                    
                    if(mInArr[r][c]==1){
                        mPaint.setColor(Color.RED);
                        canvas.drawRect(r*mCounterWidth,c*mCounterWidth, r*mCounterWidth+mCounterWidth-1, c*mCounterWidth+mCounterWidth-1, mPaint);
                        mPaint.setColor(Color.GREEN);
                        canvas.drawLine(r*mCounterWidth, c*mCounterWidth, r*mCounterWidth, c*mCounterWidth+mCounterWidth, mPaint);
                        canvas.drawLine(r*mCounterWidth, c*mCounterWidth+mCounterWidth, r*mCounterWidth+mCounterWidth, c*mCounterWidth+mCounterWidth, mPaint);
                    }else{
                        mPaint.setColor(Color.WHITE);
                        canvas.drawRect(r*mCounterWidth,c*mCounterWidth, r*mCounterWidth+mCounterWidth-1, c*mCounterWidth+mCounterWidth-1, mPaint);
                        mPaint.setColor(Color.GREEN);
                        canvas.drawLine(r*mCounterWidth, c*mCounterWidth, r*mCounterWidth, c*mCounterWidth+mCounterWidth, mPaint);
                        canvas.drawLine(r*mCounterWidth, c*mCounterWidth+mCounterWidth, r*mCounterWidth+mCounterWidth, c*mCounterWidth+mCounterWidth, mPaint);
                    }
                }
            }
            
        }
                
    }
    
    
    
}

 

做人很厚道,贴出图.

 

转载于:https://www.cnblogs.com/MMLoveMeMM/articles/3474920.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值