日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

android自定義View圓圈拖動

瀏覽:26日期:2022-09-19 10:41:58

本文實例為大家分享了android自定義View圓圈拖動的具體代碼,供大家參考,具體內容如下

問題:

1 . 累加問題:“點擊坐標”坐標在移動時必須改變位置,不然將導致累加過載2. 圓形改變問題,每次刷新時圓必將改變位置3. 圖片平移:圓在移動時只要

public class MovingBlockView extends View { //畫筆 Paint paint = new Paint(); Region circleRegion; Path circlePath; private boolean Move; /*圓心*/ private float x = 300; private float y = 300; /*點擊坐標*/ private float ClickX = 0; private float ClickY = 0; /*圓心移動距離*/ private float moveX; private float moveY; /* * 圓形拖到問題: * 1 。累加問題:“點擊坐標”坐標在移動時必須改變位置,不然將導致累加過載 * 2. 圓形改變問題,每次刷新時圓必將改變位置 * 3.圖片平移:圓在移動時只要 * * */ public MovingBlockView(Context context) {this(context, null); } public MovingBlockView(Context context, @Nullable AttributeSet attrs) {this(context, attrs, 0); } public MovingBlockView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);/*mPaint = new Paint();mPaint.setColor(Color.RED);*/paint.setColor(Color.RED); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onDraw(Canvas canvas) {super.onDraw(canvas);circlePath = new Path();x = x + moveX;y = y + moveY;circlePath.addCircle(x, y, 300, Path.Direction.CW);Region region = new Region(0, 0, getMeasuredWidth(), getMeasuredHeight());circleRegion = new Region(); circleRegion.setPath(circlePath, region);canvas.drawPath(circlePath, paint);canvas.drawLine(x + moveX, 0, x + moveX, getHeight(), paint);canvas.drawLine(0, y + moveY, getWidth(), y + moveY, paint);//canvas.drawCircle(); } @Override public boolean onTouchEvent(MotionEvent event) {int action = event.getAction();if (action == MotionEvent.ACTION_DOWN) { boolean contains = circleRegion.contains((int) event.getX(), (int) event.getY()); if (contains) {//Toast.makeText(getContext(), '點擊了圓', Toast.LENGTH_LONG).show();Move = true;ClickX = event.getX();ClickY = event.getY();Log.d(TAG, 'ACTION_DOWN: ' + ClickX);Log.d(TAG, 'ACTION_DOWN: ' + ClickY); }} else if (action == MotionEvent.ACTION_UP) { x = x + moveX; y = y + moveY; Move = false; Log.d(TAG, 'ACTION_UP: ');} else if (action == MotionEvent.ACTION_MOVE) { if (Move) {Log.d(TAG, 'ACTION_MOVE: ');moveX = event.getX() - ClickX;moveY = event.getY() - ClickY;ClickX = event.getX();ClickY = event.getY();Log.d(TAG, 'ACTION_MOVE: ' + moveX);Log.d(TAG, 'ACTION_MOVE: ' + moveY);invalidate(); }}return super.onTouchEvent(event); }}

小編再為大家分享一段之前收藏的代碼:android自定義view圓形可移動

public class Mycircle2 extends View { private Paint paint; private int rawX; private int rawY; private int wid; private int he; int statusBarHeight1 = -1; //構造方法,一般會重寫三個 //用于初始化一些數據,或者其他東西 public Mycircle2(Context context) {this(context,null); } public Mycircle2(Context context, @Nullable AttributeSet attrs) {this(context, attrs,0); } public Mycircle2(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);//初始化畫筆//抗鋸齒paint = new Paint(Paint.ANTI_ALIAS_FLAG);//設置畫筆paint.setColor(Color.GREEN);//設置畫筆顏色paint.setStrokeWidth(3);//設置畫筆粗細//獲取整個屏幕的高度和寬度DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();wid = displayMetrics.widthPixels;he = displayMetrics.heightPixels;//獲取status_bar_height資源的ID 獲取狀態欄的高度int resourceId = getResources().getIdentifier('status_bar_height', 'dimen', 'android');if (resourceId > 0) { //根據資源ID獲取響應的尺寸值 statusBarHeight1 = getResources().getDimensionPixelSize(resourceId);} } //重寫繪制的方法 @Override protected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawCircle(50,50,50,paint); /* paint.setColor(Color.LTGRAY);//實例化路徑Path path = new Path();path.moveTo(80, 200);// 此點為多邊形的起點path.lineTo(120, 250);path.lineTo(80, 250);path.close(); // 使這些點構成封閉的多邊形canvas.drawPath(path, paint);*/ } //拖動事件 //拖動的實現原理:/** * 每個View在屏幕上都有個坐標,也就是上下左右邊距,在屏幕上都有(x,y)坐標。如果坐標移動,那么View的位置也會移動 * ,這是比較好理解的。 * 我們手指在手機屏幕上滑動的時候,手指的坐標也是移動的。 * 我們只需要獲得手指從按下到離開過程中的距離差,然后將距離差加到原來的坐標上就可以是實現控件的移動。 * 如果要實現拖動,那么在滑動的過程中,不斷的獲取距離差,不斷的加到原來的坐標就可以了。 * 注意: * 這里的移動是相對于屏幕的,所以我們獲取坐標應該是絕對坐標,而不是相對坐標 * event.getRawX() ---- 獲取絕對X坐標 * event.getRawY() ---- 獲取絕對Y坐標 * * event.getX()-------- 獲取相對坐標x * event.getY()-------- 獲取相對坐標Y * */ // onTouchEvent 處理觸摸事件 //Touch事件:1.按下ACTION_DOWN,2.抬起ACTION_UP,3 滑動 ACTION_MOVE 4.取消ACTION_CANCEL //獲取觸摸點的坐標 //絕對坐標---相對于屏幕來說 //相對坐標---相對于自己 //event.getAction() 獲取事件 @Override public boolean onTouchEvent(MotionEvent event) {super.onTouchEvent(event);switch (event.getAction()){ case MotionEvent.ACTION_DOWN://獲取開始的坐標rawX = (int) event.getRawX();rawY = (int) event.getRawY();break; case MotionEvent.ACTION_MOVE://獲取移動時候的坐標int yX = (int) event.getRawX();int yY = (int) event.getRawY();//減去手指按下時候的坐標//得到移動的間距int jX=yX-rawX;int jY=yY-rawY;//將間距,加到原來的坐標(上下左右)int l=getLeft()+jX;int r=getRight()+jX;int t=getTop()+jY;int b=getBottom()+jY;//判斷if(l<0){ l=0; r=getWidth();}if(t<0){ t=0; b=getHeight();}if(r>wid){ r=wid; l=wid-getHeight();}//如果移動到最下邊,就判斷是否等于屏幕高度減去狀態欄高度if(b>he-statusBarHeight1){ //賦值 b=he-statusBarHeight1; t=b-getHeight();}//重新賦值給布局layout(l,t,r,b);//規定了View的位置//將lastX,lastY重新賦值rawX=yX;rawY=yY;break; case MotionEvent.ACTION_UP:break;}return true;//返回true代表自己處理事件 }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美精品不卡| 亚洲最新av| 久久精品青草| 国产日产高清欧美一区二区三区| 在线日韩欧美| 极品av在线| 国产亚洲字幕| 丝袜美腿亚洲色图| 亚洲性图久久| 亚洲一区资源| 美女精品久久| 国产精品免费99久久久| 视频一区日韩精品| 视频在线观看国产精品| 欧美日韩一区二区三区视频播放| 精品视频一区二区三区四区五区 | 日韩精品一区二区三区av| 国产一区二区亚洲| 国产欧美一区二区精品久久久 | 久久wwww| 国产精品4hu.www| 国产精品三级| 国产精品66| 成人在线超碰| 日韩三区免费| 欧美日韩一区二区综合| 欧美va天堂| 每日更新成人在线视频| 香蕉久久一区| 亚洲一区二区三区中文字幕在线观看 | 欧美一区二区三区免费看| 人人精品人人爱| 欧美综合精品| 欧美日韩国产传媒| 日韩视频网站在线观看| 欧美日韩在线二区| 久久av在线| 国产精品日本一区二区不卡视频 | 97精品一区| 不卡中文字幕| 日韩一二三区在线观看| 九九九精品视频| 国产视频一区在线观看一区免费| 婷婷五月色综合香五月| 久久91视频| 91超碰国产精品| 69堂精品视频在线播放| 欧美黄色精品| 麻豆久久久久久| 欧美二区视频| 国产精品成人自拍| 欧美91福利在线观看| 午夜一级在线看亚洲| 亚洲三级网站| 久久九九电影| 国产精品大片免费观看| 日韩精品一二三四| 天堂8中文在线最新版在线| 一二三区精品| 欧美不卡高清| 成人在线超碰| 欧美啪啪一区| 综合亚洲色图| 91精品观看| 久久影视三级福利片| 综合一区在线| 日韩欧美美女在线观看| 婷婷久久免费视频| 午夜视频精品| 97人人精品| 麻豆一区二区在线| 日韩福利在线观看| 影音先锋久久精品| 午夜一区在线| 亚洲少妇一区| 久久国产精品久久w女人spa| 欧美午夜精彩| 另类中文字幕国产精品| 久久电影tv| 91中文字幕精品永久在线| 麻豆中文一区二区| 国产精品高潮呻吟久久久久| 美国欧美日韩国产在线播放| 亚洲婷婷在线| 性欧美69xoxoxoxo| 婷婷亚洲成人| 欧美精品黄色| 免费成人在线影院| 黄色成人精品网站| 久久久久久久久久久9不雅视频| 国产精品v亚洲精品v日韩精品| 日韩视频久久| 亚洲成人精品| 国产一区二区三区亚洲| 丁香六月综合| 欧美肉体xxxx裸体137大胆| 久久精品国内一区二区三区水蜜桃| 国产精品久久久久久久免费观看| 韩国一区二区三区视频| 国产麻豆久久| 蜜臀av一区二区在线免费观看| 国产欧美二区| 日本午夜大片a在线观看| 黑丝一区二区| 99视频+国产日韩欧美| 日韩一区二区三区免费视频 | 国产精品成人国产| 97精品一区| 午夜电影亚洲| 欧美日韩xxxx| 欧美天堂一区二区| 亚洲一级少妇| 国产专区精品| 国产91欧美| 中文亚洲免费| 麻豆久久久久久| 亚洲欧美日韩视频二区| 卡一卡二国产精品| 亚洲经典在线| 久久精品国产网站| 三级欧美在线一区| 国产一区二区亚洲| 亚洲精品九九| 美女视频黄 久久| 国产福利资源一区| 欧美日韩视频网站| 日本午夜免费一区二区| 激情久久中文字幕| 精品国产乱码久久久久久樱花| 久久免费影院| 日本精品国产| 一级成人国产| 亚洲精品网址| 91精品蜜臀一区二区三区在线| 国产日韩三级| 中文字幕亚洲在线观看| 香蕉久久99| 91精品一区国产高清在线gif| 国产精品成人3p一区二区三区| 免费日本视频一区| 999国产精品永久免费视频app| 国产日韩欧美一区二区三区在线观看 | 欧美精品羞羞答答| 国产精品久久久亚洲一区| 久久国产精品免费一区二区三区| 日韩精品一区第一页| 日韩精品欧美| 婷婷激情一区| 成人自拍av| 婷婷成人综合| 蜜桃久久久久久久| 免费成人网www| 欧美国产91| 亚洲永久字幕| 久久电影一区| 久久av一区二区三区| 91精品麻豆| 国产精品xxx| 成人精品动漫一区二区三区| 成人欧美一区二区三区的电影| caoporn视频在线| 日韩电影免费网址| 日韩精品1区| 亚洲我射av| 亚洲精品大片| 国产精品久久久久久模特| 亚洲在线网站| 亚洲综合五月| 国产欧美大片| 精品国产午夜肉伦伦影院| 六月天综合网| 欧美激情亚洲| 99精品美女| 男女激情视频一区| 国产探花一区| 亚洲免费影视| 视频一区视频二区在线观看| 亚洲一级特黄| 中文在线а√天堂| 麻豆9191精品国产| 国产日本精品| 国内揄拍国内精品久久| 亚洲精品**中文毛片| 国产精品久久久久av蜜臀| 欧美va天堂| 国产日产精品一区二区三区四区的观看方式| 91精品国产成人观看| 亚洲一区二区三区四区电影| 欧美欧美黄在线二区| 亚洲有吗中文字幕| 人人香蕉久久| 欧美久久精品| 午夜一级久久| 成人日韩在线| 日韩欧美自拍| 国产精品一区二区三区av| 欧美xxxx中国| 91亚洲精品在看在线观看高清| 欧美不卡在线| 亚洲精品99|