知识点:自定义UI组件,跟随手指在屏幕上移动
Canvas 组件表示屏幕上一个空白矩形区域,应用程序可以在该区域内绘图,或者可以从该区域捕获用户的输入事件。
DrawView.java
package com.sammer.customview; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; /** * Created by Administrator on 2017/8/10. * Weidong Wang 2017 */ //自定义UI组件 public class DrawView extends View { public float currentX = 40; public float currentY = 50; //定义画笔 Paint p = new Paint(); public DrawView(Context context) { super(context); } public DrawView(Context context, AttributeSet set) { super(context,set); } //Canvas 组件表示屏幕上一个空白矩形区域,应用程序可以在该区域内绘图,或者可以从该区域捕获用户的输入事件。
@Override public void onDraw(Canvas canvas) { super.onDraw(canvas); p.setColor(Color.RED); //绘制小球 canvas.drawCircle(currentX,currentY,15,p); } @Override public boolean onTouchEvent(MotionEvent event) { currentX = event.getX(); currentY = event.getY(); invalidate();//通知当前组件重绘自己 return true; } }MainActivity.java
package com.sammer.customview; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.LinearLayout; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LinearLayout root = (LinearLayout) findViewById(R.id.root); final DrawView draw = new DrawView(this); draw.setMinimumWidth(300); draw.setMinimumHeight(500); root.addView(draw); } }activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/root" android:orientation="vertical"> </LinearLayout>
---------------------------------------------------------------------------------------------------------------
方案2,在布局文件中管理该组建,DrawView.java不变
activity.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/root" android:orientation="vertical"> <com.sammer.customview.DrawView android:layout_height="match_parent" android:layout_width="match_parent" /> </LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }