Android自定義view圓并隨手指移動
更新時間:2017年08月28日 11:51:31 作者:heibuke
這篇文章主要為大家詳細(xì)介紹了Android自定義view圓并隨手指移動,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了Android自定義view圓并隨手指移動的具體代碼,供大家參考,具體內(nèi)容如下
main代碼
public class MainActivity extends AppCompatActivity {
private int screenW; //屏幕寬度
private int screenH; //屏幕高度
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Display dis = this.getWindowManager().getDefaultDisplay();
// 設(shè)置全屏
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 獲取屏幕寬度
screenW = dis.getWidth();
// 獲取屏幕高度
screenH = dis.getHeight();
setContentView(new MyView(this));
}
//自定義繪圖類
class MyView extends View {
private Paint paint; //定義畫筆
private float cx = 50; //圓點默認(rèn)X坐標(biāo)
private float cy = 50; //圓點默認(rèn)Y坐標(biāo)
private int radius = 20;
//定義顏色數(shù)組
private int colorArray[] = {Color.BLACK,Color.BLACK,Color.GREEN,Color.YELLOW, Color.RED};
private int paintColor = colorArray[0]; //定義畫筆默認(rèn)顏色
public MyView(Context context) {
super(context);
//初始化畫筆
initPaint();
}
private void initPaint(){
paint = new Paint();
//設(shè)置消除鋸齒
paint.setAntiAlias(true);
//設(shè)置畫筆顏色
paint.setColor(paintColor);
}
//重寫onDraw方法實現(xiàn)繪圖操作
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//將屏幕設(shè)置為白色
canvas.drawColor(Color.WHITE);
//修正圓點坐標(biāo)
revise();
//隨機設(shè)置畫筆顏色
setPaintRandomColor();
//繪制小圓作為小球
canvas.drawCircle(cx, cy, radius, paint);
}
//為畫筆設(shè)置隨機顏色
private void setPaintRandomColor(){
Random rand = new Random();
int randomIndex = rand.nextInt(colorArray.length);
paint.setColor(colorArray[randomIndex]);
}
//修正圓點坐標(biāo)
private void revise(){
if(cx <= radius){
cx = radius;
}else if(cx >= (screenW-radius)){
cx = screenW-radius;
}
if(cy <= radius){
cy = radius;
}else if(cy >= (screenH-radius)){
cy = screenH-radius;
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 按下
cx = (int) event.getX();
cy = (int) event.getY();
// 通知重繪
postInvalidate(); //該方法會調(diào)用onDraw方法,重新繪圖
break;
case MotionEvent.ACTION_MOVE:
// 移動
cx = (int) event.getX();
cy = (int) event.getY();
// 通知重繪
postInvalidate();
break;
case MotionEvent.ACTION_UP:
// 抬起
cx = (int) event.getX();
cy = (int) event.getY();
// 通知重繪
postInvalidate();
break;
}
/*
* 備注1:此處一定要將return super.onTouchEvent(event)修改為return true,原因是:
* 1)父類的onTouchEvent(event)方法可能沒有做任何處理,但是返回了false。
* 2)一旦返回false,在該方法中再也不會收到MotionEvent.ACTION_MOVE及MotionEvent.ACTION_UP事件。
*/
//return super.onTouchEvent(event);
return true;
} }
}
布局
<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" tools:context="com.example.sn.MainActivity"> <com.example.sn.MainActivity.MyView android:id="@+id/myview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> </RelativeLayout>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
android基于SwipeRefreshLayout實現(xiàn)類QQ的側(cè)滑刪除
本篇文章主要介紹了android基于SwipeRefreshLayout實現(xiàn)類QQ的側(cè)滑刪除,非常具有實用價值,需要的朋友可以參考下2017-10-10
詳解Flutter自定義應(yīng)用程序內(nèi)鍵盤的實現(xiàn)方法
本文將展示如何利用Flutter創(chuàng)建自定義鍵盤小部件,用于在自己的應(yīng)用程序中的Flutter TextField中輸入文本,感興趣的小伙伴可以了解一下2022-06-06
android Setting中隱藏項實現(xiàn)原理與代碼
我們都知道做程序員有時會就像android中,程序員在setting中就隱藏這樣一項,接下來將詳細(xì)介紹,感興趣的朋友可以了解下哦2013-01-01
Android應(yīng)用中制作選中后圖標(biāo)變大浮動效果的代碼分享
這篇文章主要介紹了Android應(yīng)用中制作選中后圖標(biāo)變大浮動效果的代碼分享,這里作者舉了一個體育賽事app的例子,需要的朋友可以參考下2016-02-02
Android?nonTransitiveRClass資源沖突問題淺析
這篇文章主要介紹了Android?nonTransitiveRClass資源沖突問題,別搞錯了,nonTransitiveRClass不能解決資源沖突,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12

