一個關於自定義控制項的小Demo,隨著手指移動的小球。 先看下效果圖: 實現代碼如下: 1.自定義控制項類 2.引用自定義控制項 第一種:xml中引用 第二種:代碼中引用 以上,將Demo運行到模擬器或手機上,即可實現一個紅色的圓,隨著手指觸摸移動而移動的效果。 ...
一個關於自定義控制項的小Demo,隨著手指移動的小球。
先看下效果圖:
實現代碼如下:
1.自定義控制項類
1 package com.dc.customview.view; 2 3 import android.content.Context; 4 import android.graphics.Canvas; 5 import android.graphics.Color; 6 import android.graphics.Paint; 7 import android.util.AttributeSet; 8 import android.view.MotionEvent; 9 import android.view.View; 10 import android.view.WindowManager; 11 12 public class DrawCircle extends View { 13 //圓的初始位置 14 private int x = 100; 15 private int y = 100; 16 Context context; 17 18 /** 19 * 有style資源文件時調用 20 * @param context 21 * @param attrs 22 * @param defStyle 23 */ 24 public DrawCircle(Context context, AttributeSet attrs, int defStyle) { 25 super(context, attrs, defStyle); 26 this.context = context; 27 } 28 /** 29 * xml創建時調用 30 * @param context 31 * @param attrs 32 */ 33 public DrawCircle(Context context, AttributeSet attrs) { 34 super(context, attrs); 35 this.context = context; 36 } 37 /** 38 * java代碼創建時調用 39 * @param context 40 */ 41 public DrawCircle(Context context) { 42 super(context); 43 this.context = context; 44 } 45 46 @Override 47 protected void onDraw(Canvas canvas) { 48 super.onDraw(canvas); 49 // 畫筆 50 Paint paint = new Paint(); 51 paint.setColor(Color.RED); 52 53 //繪製圓 54 //cx :圓心的x坐標 55 //cy :圓心的y坐標 56 //radius :圓的半徑 57 //paint :畫筆 58 canvas.drawCircle(x, y, 20, paint); 59 } 60 61 @Override 62 public boolean onTouchEvent(MotionEvent event) { 63 switch (event.getAction()) { 64 case MotionEvent.ACTION_DOWN: 65 66 case MotionEvent.ACTION_MOVE: 67 68 case MotionEvent.ACTION_UP: 69 // 獲取當前觸摸點的x,y坐標 70 71 x = (int) event.getX(); 72 y = (int) event.getY(); 73 74 75 break; 76 } 77 //獲取屏幕寬高 78 WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 79 int width = manager.getDefaultDisplay().getWidth(); 80 int heigh = manager.getDefaultDisplay().getHeight(); 81 82 //重新繪製圓 ,控制小球不會被移出屏幕 83 if(x>=20 && y>=20 && x<=width-20 && y<=heigh-90){ 84 invalidate(); 85 } 86 // 自己處理觸摸事件 87 return true; 88 } 89 90 }
2.引用自定義控制項
第一種:xml中引用
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:id="@+id/rl"> 6 7 <!-- 自定義控制項的全類名 --> 8 <com.dc.customview.view.DrawCircle 9 android:id="@+id/circle" 10 android:layout_width="wrap_content" 11 android:layout_height="wrap_content" > 12 </com.dc.customview.view.DrawCircle> 13 14 </RelativeLayout>
第二種:代碼中引用
1 package com.dc.customview; 2 3 import com.dc.customview.view.DrawCircle; 4 5 import android.os.Bundle; 6 import android.app.Activity; 7 import android.view.Menu; 8 import android.view.View; 9 import android.widget.RelativeLayout; 10 11 public class MainActivity extends Activity { 12 13 @Override 14 protected void onCreate(Bundle savedInstanceState) { 15 super.onCreate(savedInstanceState); 16 setContentView(R.layout.activity_main); 17 18 //獲取容器 19 RelativeLayout container = (RelativeLayout) findViewById(R.id.rl); 20 21 //創建自定義控制項 22 DrawCircle circle = new DrawCircle(this); 23 24 //添加到容器 25 container.addView(circle); 26 } 27 28 }
以上,將Demo運行到模擬器或手機上,即可實現一個紅色的圓,隨著手指觸摸移動而移動的效果。