Android實(shí)現(xiàn)檢測(cè)手機(jī)多點(diǎn)觸摸點(diǎn)數(shù)
本文實(shí)例為大家分享了Android檢測(cè)手機(jī)多點(diǎn)觸摸點(diǎn)數(shù)的具體代碼,供大家參考,具體內(nèi)容如下
說(shuō)明:手指每點(diǎn)擊一個(gè)地方,在那個(gè)地方就畫(huà)一個(gè)圓
第一種方式:
效果圖:
Java代碼:
首先我們要寫(xiě)一個(gè)繪圓類(lèi)
package com.example.myapplication; ? /** ?* Created by Administrator on 2017/7/9 0009. ?*/ ? import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; ? import java.util.Random; ? /** ?* 一個(gè)圓類(lèi) ?*/ public class Circle { ? ? ? public float x; ? ? ? ? ? //圓心點(diǎn)的x坐標(biāo) ? ? public float y; ? ? ? ? ? //圓心點(diǎn)的y坐標(biāo) ? ? public int r=100; ? ? ? ? //圓的半徑 ? ? public int pointId; ? ? ?//員的下標(biāo) ? ? //初始化顏色 ? ? int red; ? ? int green; ? ? int blue; ? ? Random random=new Random();//初始化隨機(jī)數(shù) ? ? ? public Circle(float x,float y,int pointId){ ? ? ? ? this.x=x; ? ? ? ? this.y=y; ? ? ? ? this.pointId=pointId; ? ? ? ? red=random.nextInt(255); ? ? ? ? green=random.nextInt(255); ? ? ? ? blue=random.nextInt(255); ? ? } ? ? public void drawSelf(Canvas canvas, Paint paint){ ? ? ? ? paint.setColor(Color.rgb(red,green,blue)); ? ? ? ? canvas.drawCircle(x,y,r,paint); ? ? } ? }
然后有一個(gè)自定義的控件類(lèi)
package com.example.myapplication; ? import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.SurfaceView; import android.view.View; ? import java.util.ArrayList; import java.util.List; ? /** ?* Created by Administrator on 2017/7/9 0009. ?*/ ? public class MyView extends View { ?? ? ? //定義個(gè)圓的集合 ? ? private List<Circle> circles=new ArrayList<>(); ? ? ? public MyView(Context context) { ? ? ? ? super(context); ? ? } ? ? ? public MyView(Context context, @Nullable AttributeSet attrs) { ? ? ? ? super(context, attrs); ? ? } ? ? ? public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { ? ? ? ? super(context, attrs, defStyleAttr); ? ? } ? ? ? public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { ? ? ? ? super(context, attrs, defStyleAttr, defStyleRes); ? ? } ? ? ? @Override ? ? protected void onDraw(Canvas canvas) { ? ? ? ? super.onDraw(canvas); ? ? ? ? Paint paint=new Paint(); ? ? ? ? for (Circle circle : circles) { ? ? ? ? ? ? circle.drawSelf(canvas,paint); ? ? ? ? } ? ? } ? ? ? @Override ? ? public boolean onTouchEvent(MotionEvent event) { ? ? ?//獲取手指的行為 ? ? ? ? int ?action=event.getAction(); ? ? ? ? int ?action_code=action&0xff; ? ? ?//手指的下標(biāo)index ? ? ? ? int pointIndex=action>>8; ? ? ?//獲取手值的坐標(biāo) ? ? ? ? float x=event.getX(pointIndex); ? ? ? ? float y=event.getY(pointIndex); ? ? ? ? //獲取手值的名字(ID) ? ? ? ? int pointId=event.getPointerId(pointIndex); ? ? ? ? if(action_code>=5){ ? ? ? ? ? ? action_code-=5; ? ? ? ? } ? ? ? ? ? ? //單點(diǎn)觸摸時(shí)用action判斷 ? ? ? ? //多點(diǎn)觸摸時(shí)用action_code判斷 ? ? ?switch (action_code){ ? ? ? ? ?case MotionEvent.ACTION_DOWN: //按下 ? ? ? ? ? ? ?//實(shí)例化圓 ? ? ? ? ? ? ?Circle circle=new Circle(x,y,pointId); ? ? ? ? ? ? ?//將圓添加到集合中 ? ? ? ? ? ? ?circles.add(circle); ? ? ? ? ? ? ?break; ? ? ? ? ?case MotionEvent.ACTION_UP: ? //抬起 ? ? ? ? ? ? ?//找到具體的圓將它從集合中移除即可 ? ? ? ? ? ? ?circles.remove(get(pointId)); ? ? ? ? ? ? ?break; ? ? ? ? ?case MotionEvent.ACTION_MOVE: //移動(dòng) ? ? ? ? ? ? //找到具體的圓,時(shí)時(shí)修改圓心點(diǎn)坐標(biāo)即可 ? ? ? ? ? ? ?for (int i = 0; i <event.getPointerCount(); i++) { ? ? ? ? ? ? ? ? ?int id=event.getPointerId(i);//得打具體圓的id ? ? ? ? ? ? ? ? ?//從新給圓賦值圓心點(diǎn)坐標(biāo) ? ? ? ? ? ? ? ? ?get(id).x=event.getX(i); ? ? ? ? ? ? ? ? ?get(id).y=event.getY(i); ? ? ? ? ? ? ?} ? ? ? ? ? ? ?break; ? ? ?} ? ? ? ?//重新調(diào)用onDraw 重繪 ? ? ? invalidate(); ? ? ? ? //子線程中重新繪制 postInvalidate(); ? ? ? ? return true; } ? //定義一個(gè)方法,通過(guò)pointId返回具體的圓 ? ? public Circle get(int pointId){ ? ? ? ? ? for (Circle circle : circles) { ? ? ? ? ? ? if(circle.pointId==pointId){ ? ? ? ? ? ? ? ? return ?circle; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? return ?null; ? ? } }
使用的話,就在Activity的setContentView(new MTView); 或者在XML文件中以控件的形式
第二種方式:
效果圖:
寫(xiě)一個(gè)Java類(lèi)
package com.example.myapplication; ? import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; ? /** ?* Created by Administrator on 2017/7/9 0009. ?*/ ? public class MTView extends SurfaceView implements SurfaceHolder.Callback{ ? ? private static final int MAX_TOUCHPOINTS = 10; ? ? private static final String START_TEXT = "請(qǐng)隨便觸摸屏幕進(jìn)行測(cè)試"; ? ? private Paint textPaint = new Paint(); ? ? private Paint touchPaints[] = new Paint[MAX_TOUCHPOINTS]; ? ? private int colors[] = new int[MAX_TOUCHPOINTS]; ? ? ? private int width, height; ? ? private float scale = 1.0f; ? ? ? public MTView(Context context) { ? ? ? ? super(context); ? ? ? ? SurfaceHolder holder = getHolder(); ? ? ? ? holder.addCallback(this); ? ? ? ? setFocusable(true); // 確保我們的View能獲得輸入焦點(diǎn) ? ? ? ? setFocusableInTouchMode(true); // 確保能接收到觸屏事件 ? ? ? ? init(); ? ? } ? ?private void init(){ ? ? ? ?// 初始化10個(gè)不同顏色的畫(huà)筆 ? ? ? ?textPaint.setColor(Color.WHITE); ? ? ? ?colors[0] = Color.BLUE; ? ? ? ?colors[1] = Color.RED; ? ? ? ?colors[2] = Color.GREEN; ? ? ? ?colors[3] = Color.YELLOW; ? ? ? ?colors[4] = Color.CYAN; ? ? ? ?colors[5] = Color.MAGENTA; ? ? ? ?colors[6] = Color.DKGRAY; ? ? ? ?colors[7] = Color.WHITE; ? ? ? ?colors[8] = Color.LTGRAY; ? ? ? ?colors[9] = Color.GRAY; ? ? ? ?for (int i = 0; i < MAX_TOUCHPOINTS; i++) { ? ? ? ? ? ?touchPaints[i] = new Paint(); ? ? ? ? ? ?touchPaints[i].setColor(colors[i]); ? ? ? ?} ? ?} ? ? ? /** ? ? ?* 處理觸屏事件 ? ? ?*/ ? ? @Override ? ? public boolean onTouchEvent(MotionEvent event) { ? ? ? ? // 獲得屏幕觸點(diǎn)數(shù)量 ? ? ? ? int pointerCount = event.getPointerCount(); ? ? ? ? if (pointerCount > MAX_TOUCHPOINTS) { ? ? ? ? ? ? pointerCount = MAX_TOUCHPOINTS; ? ? ? ? } ? ? ? ? ? // 鎖定Canvas,開(kāi)始進(jìn)行相應(yīng)的界面處理 ? ? ? ? Canvas c = getHolder().lockCanvas(); ? ? ? ? if (c != null) { ? ? ? ? ? ? c.drawColor(Color.BLACK); ? ? ? ? ? ? if (event.getAction() == MotionEvent.ACTION_UP) { ? ? ? ? ? ? ? ? // 當(dāng)手離開(kāi)屏幕時(shí),清屏 ? ? ? ? ? ? } else { ? ? ? ? ? ? ? ? // 在每一個(gè)觸點(diǎn)上繪制一個(gè)十字和坐標(biāo)信息 ? ? ? ? ? ? ? ? for (int i = 0; i < pointerCount; i++) { ? ? ? ? ? ? ? ? ? ? int id = event.getPointerId(i); ? ? ? ? ? ? ? ? ? ? int x = (int) event.getX(i); ? ? ? ? ? ? ? ? ? ? int y = (int) event.getY(i); ? ? ? ? ? ? ? ? ? ? drawCrosshairsAndText(x, y, touchPaints[id], i, id, c); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? // 在每一個(gè)觸點(diǎn)上繪制一個(gè)圓 ? ? ? ? ? ? ? ? for (int i = 0; i < pointerCount; i++) { ? ? ? ? ? ? ? ? ? ? int id = event.getPointerId(i); ? ? ? ? ? ? ? ? ? ? int x = (int) event.getX(i); ? ? ? ? ? ? ? ? ? ? int y = (int) event.getY(i); ? ? ? ? ? ? ? ? ? ? drawCircle(x, y, touchPaints[id], c); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? ? // 畫(huà)完后,unlock ? ? ? ? ? ? getHolder().unlockCanvasAndPost(c); ? ? ? ? } ? ? ? ? return true; ? ? } ? ? ? /** ? ? ?* 畫(huà)十字及坐標(biāo)信息 ? ? ?* ? ? ?* @param x ? ? ?* @param y ? ? ?* @param paint ? ? ?* @param ptr ? ? ?* @param id ? ? ?* @param c ? ? ?*/ ? ? private void drawCrosshairsAndText(int x, int y, Paint paint, int ptr, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int id, Canvas c) { ? ? ? ? c.drawLine(0, y, width, y, paint); ? ? ? ? c.drawLine(x, 0, x, height, paint); ? ? ? ? int textY = (int) ((15 + 20 * ptr) * scale); ? ? ? ? c.drawText("x" + ptr + "=" + x, 10 * scale, textY, textPaint); ? ? ? ? c.drawText("y" + ptr + "=" + y, 70 * scale, textY, textPaint); ? ? ? ? c.drawText("id" + ptr + "=" + id, width - 55 * scale, textY, textPaint); ? ? } ? ? /** ? ? ?* 畫(huà)圓 ? ? ?* ? ? ?* @param x ? ? ?* @param y ? ? ?* @param paint ? ? ?* @param c ? ? ?*/ ? ? private void drawCircle(int x, int y, Paint paint, Canvas c) { ? ? ? ? c.drawCircle(x, y, 40 * scale, paint); ? ? } ? ? ? @Override ? ? public void surfaceCreated(SurfaceHolder holder) { ? ? ? } ? ? /** ? ? ?* 進(jìn)入程序時(shí)背景畫(huà)成黑色,然后把START_TEXT寫(xiě)到屏幕 ? ? ?*/ ? ? @Override ? ? public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { ? ? ? ? this.width = width; ? ? ? ? this.height = height; ? ? ? ? if (width > height) { ? ? ? ? ? ? this.scale = width / 480f; ? ? ? ? } else { ? ? ? ? ? ? this.scale = height / 480f; ? ? ? ? } ? ? ? ? textPaint.setTextSize(14 * scale); ? ? ? ? Canvas c = getHolder().lockCanvas(); ? ? ? ? if (c != null) { ? ? ? ? ? ? c.drawColor(Color.BLACK); ? ? ? ? ? ? float tWidth = textPaint.measureText(START_TEXT); ? ? ? ? ? ? c.drawText(START_TEXT, width / 2 - tWidth / 2, height / 2, textPaint); ? ? ? ? ? ? getHolder().unlockCanvasAndPost(c); ? ? ? ? } ? ? } ? ? ? @Override ? ? public void surfaceDestroyed(SurfaceHolder holder) { ? ? ? } ? }
使用的話,就在Activity的setContentView(new MTView);
一個(gè)圓逐漸擴(kuò)大半徑
Java 代碼
package com.example.myapplication; ? /** ?* Created by Administrator on 2017/7/9 0009. ?*/ ? import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; ? import java.util.Random; ? /** ?* 一個(gè)圓類(lèi) ?*/ public class Circle { ? ? ? public MyView myView; ? ? public float x; ? ? ? ? ? //圓心點(diǎn)的x坐標(biāo) ? ? public float y; ? ? ? ? ? //圓心點(diǎn)的y坐標(biāo) ? ? public int r; ? ? ? ? //圓的半徑 ? ? public int pointId; ? ? ?//員的下標(biāo) ? ? //初始化顏色 ? ? int red; ? ? int green; ? ? int blue; ? ? Random random=new Random();//初始化隨機(jī)數(shù) ? ? ? public Circle(float x,float y,int r,int pointId){ ? ? ? ? this.x=x; ? ? ? ? this.y=y; ? ? ? ? this.r=r; ? ? ? ? this.pointId=pointId; ? ? ? ? red=random.nextInt(255); ? ? ? ? green=random.nextInt(255); ? ? ? ? blue=random.nextInt(255); ? ? } ? ? public void drawSelf(Canvas canvas, Paint paint){ ? ? ? ? paint.setColor(Color.rgb(red,green,blue)); ? ? ? ? paint.setStyle(Paint.Style.STROKE); ? ? ? ? canvas.drawCircle(x,y,r,paint); ? ? } }
自定義控件類(lèi)
package com.example.myapplication; ? import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.SurfaceView; import android.view.View; ? import java.util.ArrayList; import java.util.List; ? /** ?* Created by Administrator on 2017/7/9 0009. ?*/ ? public class MyView extends View { ? ? ? //定義個(gè)圓的集合 ? ? private List<Circle> circles=new ArrayList<>(); ? ? //定義個(gè)一個(gè)全局變量 ? ? int pointId; ? ? float X; ? ? float Y; ? ? int r=10; ? ? ? public MyView(Context context) { ? ? ? ? super(context); ? ? } ? ? ? public MyView(Context context, @Nullable AttributeSet attrs) { ? ? ? ? super(context, attrs); ? ? } ? ? ? public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { ? ? ? ? super(context, attrs, defStyleAttr); ? ? } ? ? ? public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { ? ? ? ? super(context, attrs, defStyleAttr, defStyleRes); ? ? } ? ? ? @Override ? ? protected void onDraw(Canvas canvas) { ? ? ? ? super.onDraw(canvas); ? ? ? ? Paint paint=new Paint(); ? ? ? ? for (Circle circle : circles) { ? ? ? ? ? ? circle.drawSelf(canvas,paint); ? ? ? ? } ? ? } ? ? @Override ? ? public boolean onTouchEvent(MotionEvent event) { ? ? ? ? //獲取手指的行為 ? ? ? ? int ?action=event.getAction(); ? ? ? ? int ?action_code=action&0xff; ? ? ? ? //手指的下標(biāo)index ? ? ? ? int pointIndex=action>>8; ? ? ? ? //獲取手值的坐標(biāo) ? ? ? ? float x=event.getX(pointIndex); ? ? ? ? ? ? float y=event.getY(pointIndex); ? ? ? ? X=x; ? ? ? ? Y=y; ? ? ? ? Log.i("aaa","X :"+X+"Y :"+Y); ? ? ? ? //獲取手值的名字(ID) ? ? ? ?pointId=event.getPointerId(pointIndex); ? ? ? ? Log.i("mmmm","pointId"+pointId); ? ? ? ? if(action_code>=5){ ? ? ? ? ? ? action_code-=5; ? ? ? ? } ? ? ? ? //單點(diǎn)觸摸時(shí)用action判斷 ? ? ? ? //多點(diǎn)觸摸時(shí)用action_code判斷 ? ? ? ? switch (action_code){ ? ? ? ? ? ? case MotionEvent.ACTION_DOWN: //按下后 // ? ? ? ? ? ? ? ?//實(shí)例化圓 // ? ? ? ? ? ? ? ?Circle circle=new Circle(x,y,r,pointId); // ? ? ? ? ? ? ? ?//將圓添加到集合中 // ? ? ? ? ? ? ? ?circles.add(circle); ? ? ? ? ? ? ? ? //調(diào)用線程控制雨滴 ? ? ? ? ? ? ? ? new MyThread().start(); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case MotionEvent.ACTION_UP: ? //抬起 ? ? ? ? ? ? ? ? //找到具體的圓將它從集合中移除即可 ? ? ? ? ? ? ? // ?circles.remove(get(pointId)); ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case MotionEvent.ACTION_MOVE: //移動(dòng) ? ? ? ? ? ? ? ? //找到具體的圓,時(shí)時(shí)修改圓心點(diǎn)坐標(biāo)即可 // ? ? ? ? ? ? ? ?for (int i = 0; i <event.getPointerCount(); i++) { // ? ? ? ? ? ? ? ? ? ?int id=event.getPointerId(i);//得打具體圓的id // ? ? ? ? ? ? ? ? ? ?//從新給圓賦值圓心點(diǎn)坐標(biāo) // ? ? ? ? ? ? ? ? ? ?get(id).x=event.getX(i); // ? ? ? ? ? ? ? ? ? ?get(id).y=event.getY(i); // ? ? ? ? ? ? ? ?} ? ? ? ? ? ? ? ? break; ? ? ? ? } ? ? ? ? ? //重新調(diào)用onDraw 重繪 ? ? ? ?// invalidate(); ? ? ? ? //子線程中重新繪制 postInvalidate(); ? ? ? ? return true; ? ? } ? ? ? //定義一個(gè)方法,通過(guò)pointId返回具體的圓 ? ? public Circle get(int pointId){ ? ? ? ? for (Circle circle : circles) { ? ? ? ? ? ? if(circle.pointId==pointId){ ? ? ? ? ? ? ? ? return ?circle; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? return ?null; ? ? } ? ? ? class MyThread extends ?Thread{ ? ? ? ? @Override ? ? ? ? public void run() { ? ? ? ? ? ? //實(shí)例化圓(x y就是手值的坐標(biāo) r是默認(rèn)大小,手指下標(biāo)) ? ? ? ? ? ? Circle circle=new Circle(X,Y,r,pointId); ? ? ? ? ? ? //將圓添加到集合中 ? ? ? ? ? ? circles.add(circle); ? ? ? ? ? ? //執(zhí)行下降 ? ? ? ? ? ? while(true){ ? ? ? ? ? ? ? ? //拿到圓的圓心個(gè) ? ? ? ? ? ? ? ? try { ? ? ? ? ? ? ? ? ? ? System.out.println("子線程名稱(chēng):::"+Thread.currentThread().getName()); ? ? ? ? ? ? ? ? ? ? Circle c=get(pointId); //得到剛剛畫(huà)的圓 ? ? ? ? ? ? ? ? ? ? c.x=X; ? ? ? ? ? ? ? ? ? // ?c.y=c.y+10; ? ? ? ? ? ? ? ? ? ? c.r=c.r+5; ? ? ? ? ? ? ? ? ? ? Log.i("bbbb"," X坐標(biāo)"+c.x+"Y坐標(biāo) "+c.y); ? ? ? ? ? ? ? ? ? ? sleep(200); ?//20毫秒 ? ? ? ? ? ? ? ? ? ?postInvalidate(); ? ? ? ? ? ? ? ? } catch (InterruptedException e) { ? ? ? ? ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? } ? ? ? ? ? } ? ? } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 解析Android開(kāi)發(fā)中多點(diǎn)觸摸的實(shí)現(xiàn)方法
- android 多點(diǎn)觸摸圖片縮放的具體實(shí)現(xiàn)方法
- Android實(shí)現(xiàn)手勢(shì)滑動(dòng)多點(diǎn)觸摸放大縮小圖片效果
- Android實(shí)現(xiàn)手勢(shì)滑動(dòng)多點(diǎn)觸摸縮放平移圖片效果
- Android實(shí)現(xiàn)手勢(shì)滑動(dòng)多點(diǎn)觸摸縮放平移圖片效果(二)
- Android實(shí)現(xiàn)手機(jī)多點(diǎn)觸摸畫(huà)圓
- Android檢測(cè)手機(jī)多點(diǎn)觸摸點(diǎn)數(shù)的方法
- android實(shí)現(xiàn)多點(diǎn)觸摸效果
- Android實(shí)現(xiàn)多點(diǎn)觸摸操作
- android實(shí)現(xiàn)多點(diǎn)觸摸應(yīng)用
相關(guān)文章
Android仿淘寶頭條基于TextView實(shí)現(xiàn)上下滾動(dòng)通知效果
這篇文章主要介紹了Android TextView實(shí)現(xiàn)上下滾動(dòng)通知效果,需要的朋友可以參考下2017-03-03android 復(fù)制 粘貼 剪切功能應(yīng)用
網(wǎng)上有很多android 復(fù)制 粘貼 剪切功能的文章,只是放到自己的程序中不知道如何處理,現(xiàn)在尋得一可行方法,需要的朋友可以參考下2012-11-11android開(kāi)發(fā)之橫向滾動(dòng)/豎向滾動(dòng)的ListView(固定列頭)
由于項(xiàng)目需要,我們需要一個(gè)可以橫向滾動(dòng)的,又可以豎向滾動(dòng)的 表格;經(jīng)過(guò)幾天的研究終于搞定,感興趣的朋友可以了解下哦2013-01-01詳解androidstudio項(xiàng)目上傳到github方法以及步驟
在使用studio開(kāi)發(fā)的項(xiàng)目過(guò)程中有時(shí)候我們想將項(xiàng)目發(fā)布到github上,studio其實(shí)是自帶這種功能的,那么如何使用呢,下面我們就一起來(lái)了解一下2019-01-01詳解Android中通過(guò)Intent類(lèi)實(shí)現(xiàn)組件間調(diào)用的方法
Intent能夠?qū)崿F(xiàn)應(yīng)用間的數(shù)據(jù)交互與通訊,將實(shí)現(xiàn)者和調(diào)用者解耦,接下來(lái)就來(lái)詳解Android中通過(guò)Intent類(lèi)實(shí)現(xiàn)組件間調(diào)用的方法,需要的朋友可以參考下2016-05-05Android 逆向?qū)W習(xí)詳解及實(shí)例
本文主要介紹Android 逆向?qū)W習(xí),這里整理逆向?qū)W習(xí)的思路及學(xué)習(xí)要點(diǎn),并附示例代碼,幫助大家學(xué)習(xí)理解,有需要的小伙伴可以參考下2016-09-09