页面代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Touch touch = new Touch(this); // View view = getLayoutInflater().inflate(R.layout.activity_main, null); // setContentView(new Touch(this)); setContentView(R.layout.activity_main); RelativeLayout view = (RelativeLayout) findViewById(R.id.activity_main); view.addView(new Touch(this)); }
自定义控件:
package xwj.otscale.omniteaching.com.canvas; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; /** * Created by admin on 2016/12/2. */ public class Touch extends View implements View.OnClickListener { private static final String TAG = Touch.class.getSimpleName(); int touchX = 20; int touchY = 20; //构造方法 public Touch(Context context) { super(context); setFocusable(true); setOnClickListener(this); } public Touch(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { Paint paint = new Paint(); paint.setTextSize(39); paint.setColor(Color.CYAN); paint.setAlpha(60); canvas.drawText("触屏",touchX,touchY,paint); super.onDraw(canvas); } //键盘控件监听 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_UP: touchY -=2; break; case KeyEvent.KEYCODE_DPAD_DOWN: touchY +=2; break; case KeyEvent.KEYCODE_DPAD_LEFT: touchX -=2; break; case KeyEvent.KEYCODE_DPAD_RIGHT: touchX +=2; break; } invalidate(); return super.onKeyDown(keyCode, event); } //屏幕触摸监听 @Override public boolean onTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: touchX = x; touchY = y; break; case MotionEvent.ACTION_MOVE: touchX = x; touchY = y; break; case MotionEvent.ACTION_UP: touchX = x; touchY = y; break; } postInvalidate(); return super.onTouchEvent(event); } @Override public void onClick(View v) { invalidate(); } //用于设置大小 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }
main布局xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#aa989123" tools:context="xwj.otscale.omniteaching.com.canvas.MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="text" android:textSize="70dp" /> </RelativeLayout>