电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

android自定義View圓圈拖動

瀏覽:5日期: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
相關文章:
主站蜘蛛池模板: 标准件-非标紧固件-不锈钢螺栓-非标不锈钢螺丝-非标螺母厂家-三角牙锁紧自攻-南京宝宇标准件有限公司 | 橡胶电子拉力机-塑料-微电脑电子拉力试验机厂家-江苏天源 | 无痕胶_可移胶_无痕双面胶带_可移无痕胶厂家-东莞凯峰 | 湖南专升本-湖南省专升本报名-湖南统招专升本考试网 | COD分析仪|氨氮分析仪|总磷分析仪|总氮分析仪-圣湖Greatlake | MVR蒸发器厂家-多效蒸发器-工业废水蒸发器厂家-康景辉集团官网 | 江苏皓越真空设备有限公司 | 电表箱-浙江迈峰电力设备有限公司-电表箱专业制造商 | MVR蒸发器厂家-多效蒸发器-工业废水蒸发器厂家-康景辉集团官网 | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 冷却塔改造厂家_不锈钢冷却塔_玻璃钢冷却塔改造维修-广东特菱节能空调设备有限公司 | 撕碎机,撕破机,双轴破碎机-大件垃圾破碎机厂家 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 传爱自考网_传爱自学考试网| 锤式粉碎机,医药粉碎机,锥式粉碎机-无锡市迪麦森机械制造有限公司 | 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 办公室家具_板式办公家具定制厂家-FMARTS福玛仕办公家具 | 座椅式升降机_无障碍升降平台_残疾人升降平台-南京明顺机械设备有限公司 | 立式壁挂广告机厂家-红外电容触摸一体机价格-华邦瀛 | 纯水设备_苏州皙全超纯水设备水处理设备生产厂家 | 桑茶-七彩贝壳桑叶茶 长寿茶 | PO膜_灌浆膜及地膜供应厂家 - 青州市鲁谊塑料厂 | 【黄页88网】-B2B电子商务平台,b2b平台免费发布信息网 | 地源热泵一体机,地源热泵厂家-淄博汇能环保设备有限公司 | 在线PH计-氧化锆分析仪-在线浊度仪-在线溶氧仪- 无锡朝达 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 找果网 | 苹果手机找回方法,苹果iPhone手机丢了找回,认准找果网! | 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 旋转滴界面张力仪(张力测定仪器)-百科| 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | 沈阳激光机-沈阳喷码机-沈阳光纤激光打标机-沈阳co2激光打标机 | 儋州在线-儋州招聘找工作、找房子、找对象,儋州综合生活信息门户! | 光栅尺厂家_数显表维修-苏州泽升精密机械 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 餐饮小吃技术培训-火锅串串香培训「何小胖培训」_成都点石成金[官网] | 体坛网_体坛+_体坛周报新闻客户端| 深圳成考网-深圳成人高考报名网 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 防火阀、排烟防火阀、电动防火阀产品生产销售商-德州凯亿空调设备有限公司 | 航拍_专业的无人机航拍摄影门户社区网站_航拍网 |