你的位置:首页 > 操作系统

[操作系统]自定义控件——随着手指移动的小球


  一个关于自定义控件的小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 context21    * @param attrs22    * @param defStyle23   */24   public DrawCircle(Context context, AttributeSet attrs, int defStyle) {25     super(context, attrs, defStyle);26     this.context = context;27   }28   /**29    * 30    * @param context31    * @param attrs32   */33   public DrawCircle(Context context, AttributeSet attrs) {34     super(context, attrs);35     this.context = context;36   }37   /**38    * java代码创建时调用39    * @param context40   */41   public DrawCircle(Context context) {42     super(context);43     this.context = context;44   }45   46   @Override47   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   @Override62   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.引用自定义控件

  第一种:

 1 <RelativeLayout  2    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   @Override14   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运行到模拟器或手机上,即可实现一个红色的圆,随着手指触摸移动而移动的效果。

 




深圳旅游线路报价优惠深圳旅游必去景点是深圳去深圳旅游费用深圳旅游攻略2015自助游深圳旅游攻略必去景点无锡梅园 江南著名赏梅胜地 广州3月有什么好玩地方?广州赏花去哪里好? 在闽南的古村中,聆听花开的声音 那琴半岛地质海洋公园钓鱼怎么收费?台山海洋公园能玩什么? 中山逍遥谷森林公园简介?中山市五桂山逍遥谷介绍? 中山逍遥谷度假村门票多少钱?中山逍遥谷森林公园门票价格? 中山逍遥谷度假村地址?中山逍遥谷森林公园在哪里? 中山逍遥谷度假村门票价格?中山市五桂山逍遥谷门票多少钱? 广宁竹海旅游功略?广宁竹海大观门票包含哪些项目? 2015百万葵园中秋节活动?广州百万葵园中秋节门票多少钱? 佗城门票包含什么?龙川佗城景点有哪些? 佗城景区门票多少钱?龙川佗城景区电话? 七仙岭君澜度假酒店9月优惠活动?保亭七仙岭君澜酒店有什么优惠? 知青逛公园 漫游明孝陵 三亚鹿回头山顶公园景点介绍?鹿回头山顶公园有什么好玩的? 海南鹿回头山顶公园地址?鹿回头山顶公园自己坐车怎么去? Q65110A8947 Datasheet Q65110A8947 Datasheet Q65110A8964 Datasheet Q65110A8964 Datasheet Q65110A8973 Datasheet Q65110A8973 Datasheet 三亚蜜月旅行 三亚蜜月旅行 三亚蜜月旅行 迪拜十大建筑 迪拜十大建筑 迪拜十大建筑 深圳鹤湖新居 深圳鹤湖新居 深圳鹤湖新居