安卓初学|随手指滑动小球

转载请注明出处:http://blog.csdn.net/mr_leixiansheng/article/details/53520190

初学者了解自定义View很好的练习
【安卓初学|随手指滑动小球】1、新建MyDraw类并继承View,重写onDrwa画出你想要的控件

package com.example.administrator.draw; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; /** * Created by Administrator on 2016/12/8. */public class MyDraw extends View { float X = 200; float Y = 200; float R = 40; float centerX; float centerY; public MyDraw(Context context) { super(context); }//获取屏幕高度宽度 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int measureWidth = MeasureSpec.getSize(widthMeasureSpec); int measureHeigt = MeasureSpec.getSize(heightMeasureSpec); //获取屏幕中心点 centerX = measureWidth/2; centerY = measureHeigt/2; }@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //创建画笔 Paint paint = new Paint(); //设置画笔颜色 paint.setColor(Color.BLUE); //画圆 canvas.drawCircle(X,Y,R,paint); //重设画笔颜色 paint.setColor(Color.BLUE); //设置画笔粗细 paint.setStrokeWidth(20); canvas.drawLine(centerX, centerY, X, Y, paint); } }

2、在布局文件中添加id ,是为了在主程序中可以把自定义控件加到布局文件中

3、主程序中把自定义控件加到布局文件中,并设置触摸监听
package com.example.administrator.draw; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.LinearLayout; public class MainActivity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取布局容器 LinearLayout linearLayout = (LinearLayout) findViewById(R.id.root); //创建MyDraw组件 final MyDraw myDraw = new MyDraw(this); //自定义组件最小高度宽度 myDraw.setMinimumHeight(500); myDraw.setMinimumWidth(300); //设置监听 myDraw.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { myDraw.X = motionEvent.getX(); myDraw.Y = motionEvent.getY(); //重画 myDraw.invalidate(); return true; } }); //myDraw自定义组件添加到布局文件 linearLayout.addView(myDraw); } }

Kotlin写法:
package com.leixiansheng.kotlintestimport android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.util.Log import android.view.View import android.view.ViewGroup/** * Created by Leixiansheng on 2018/11/15. */ class MyDraw(context:Context) :View(context) {val TAG: String = "MyDraw" var w: Float = 200f var h: Float = 200f val r: Float = 40f var centerX: Float = 0f var centerY: Float = 0foverride fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { super.onMeasure(widthMeasureSpec, heightMeasureSpec) centerX = MeasureSpec.getSize(widthMeasureSpec)/2.toFloat() centerY = MeasureSpec.getSize(heightMeasureSpec)/2.toFloat() Log.i(TAG, "centerX:${centerX},centerY:${centerY}") }override fun onDraw(canvas: Canvas) { super.onDraw(canvas) val paint = Paint() paint.color = Color.BLUE canvas.drawCircle(w, h, r, paint)paint.color = Color.BLUE paint.strokeWidth = 20f canvas.drawLine(centerX, centerY, w, h, paint) } }

package com.leixiansheng.kotlintestimport android.support.v7.app.AppCompatActivity import android.os.Bundle import android.util.DisplayMetrics import android.view.MotionEvent import android.view.View import kotlinx.android.synthetic.main.activity_main.*class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) getScreen()val myDraw = MyDraw(this) myDraw.minimumHeight = 50 myDraw.minimumWidth = 300 myDraw.setOnTouchListener(object : View.OnTouchListener { override fun onTouch(v: View?, event: MotionEvent): Boolean { myDraw.w = event.x myDraw.h = event.y myDraw.invalidate() return true } }) root.addView(myDraw) }private fun getScreen() { val displayMetrics = DisplayMetrics()windowManager.defaultDisplay.getMetrics(displayMetrics) val w = displayMetrics.widthPixels val h = displayMetrics.heightPixelstv.setText("w:${w},h:${h}") } }








    推荐阅读