【Android开发】图形图像处理技术-旋转、缩放、倾斜和平移图像

简介:
一.旋转图像
使用Android提供的android.graphics.Matrix类的setRotate()、postRotate()和preRotate()方法,可以对图像进行旋转。

由于这三种方法处理方法名不同外,语法格式等均相同,下面将以setRotate()方法为例来进行介绍。setRotate()方法有以下两种语法格式:

1.setRotate(float degress)
使用该语法可以控制Matrix进行旋转,float类型的参数用于指定旋转的角度。例如,创建一个Matrix的对象,并将其旋转30度,可以使用下面的代码:
Matrix matrix=new Matrix();//创建一个Matrix的对象
matrix.setRotate(30);//将Matrix的对象旋转30度

创建一个Matrix的对象并对其进行旋转后,还需要应用该Matrix对图像或组件进行控制。在Canvas类中提供了一个drawBitmap(Bitmap bitmap,Matrix matrix,Paint paint)方法,可以在绘制图像的同时应用Matrix上的变化。例如,需要将一个图像旋转30度后绘制到画布上,可以使用下面的代码:

Paint paint=new Paint();
Bitmap bitmap=BitmapFactory.decodeResource(MainActivity.this.getResources(),R,drawable.img1);
Matrix matrix=new Matrix();
matrix.setRotate(30);
canvas.drawBitmap(bitmap,matrix,paint);

下面写一个实例来实现应用Matrix旋转图像:
用来显示自定义的绘图类的布局文件
res/layout/main.xml:
<?xml version="1.0" encoding="utf-8"?>  
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/frameLayout1"
    android:orientation="vertical"
    >
	
</FrameLayout>

打开MainActivity,在文件中创建名为MyView的内部类,继承android.view.View类,并添加构造方法和重写onDraw(Canvas canvas)方法,在里面进行作图:

首先定义一个画笔,并绘制一张背景图像,然后在(0,0)点的位置绘制要旋转图像的原图,再绘制以(0,0)点为轴心旋转30度的图像,最后绘制以(187,187)点为轴心旋转90度的图像
MainActivity:
package com.example.test;  
  
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
  
public class MainActivity extends Activity {  


    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
      
      //获取布局文件中添加的帧布局管理器
        FrameLayout fl=(FrameLayout)findViewById(R.id.frameLayout1);
        //将自定义的MyView视图添加到帧布局
        fl.addView(new MyView(this));
	}
   
    public class MyView extends View{


		public MyView(Context context) {
			super(context);
			// TODO Auto-generated constructor stub
		}


		@Override
		protected void onDraw(Canvas canvas) {
		    Paint paint=new Paint();//定义一个画笔
		    Bitmap bitmap=BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.background);
		    canvas.drawBitmap(bitmap, 0, 0, paint);//绘制背景图像
		    Bitmap bitmap_img1=BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.img1);
		    canvas.drawBitmap(bitmap_img1, 0, 0, paint);//绘制原图
		    //应用setRotate(float degress)方法旋转图像
		    Matrix matrix=new Matrix();
		    matrix.setRotate(30);//以(0,0)点为轴心旋转30度
		    canvas.drawBitmap(bitmap_img1, matrix, paint);//绘制图像并应用matrix的变换
		    //应用setRotate(float degrees,float px,float py)方法旋转图像
		    Matrix m=new Matrix();
		    m.setRotate(90, 187, 187);
		    canvas.drawBitmap(bitmap_img1, m, paint);
		    
			super.onDraw(canvas);
		}
    	
    }
}  

运行实例,效果如图所示



二.缩放图像

使用Android提供的android.graphics.Matrix类的setScale()、postScale()和preScale()方法,可以对图像进行缩放。

1.setScale(float sx,float sy)
使用该语法格式可以对Matrix进行缩放,参数sx和sy用于指定X轴和Y轴的缩放比例。例如,创建一个Matrix对象,并将其在X轴上缩放30%,在Y轴上缩放20%,可以使用下面的代码:
Matrix m=new Matrix();
m.setScale(0.3f,0.2f);

2.setScale(float sx,float sy,float px,float py)
控制Matrix以px和py为轴心进行缩放。例如,创建一个Matrix对象,并将其以(100,100)为轴心在X轴和Y轴上缩放30%,可以使用下面的代码:
Matrix m=new Matrix();
m.setScale(0.3f,0.3f,100,100);

下面写一个实例来实现应用Matrix缩放图像:
用来显示自定义的绘图类的布局文件
res/layout/main.xml:
<?xml version="1.0" encoding="utf-8"?>  
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/frameLayout1"
    android:orientation="vertical"
    >
	
</FrameLayout>

打开MainActivity,在文件中创建名为MyView的内部类,继承android.view.View类,并添加构造方法和重写onDraw(Canvas canvas)方法,在里面进行作图:

首先定义一个画笔,并绘制一张背景图像,然后绘制以(0,0)点为轴心,在X轴和Y轴上均缩放200%的图像,在绘制以(156,156)为轴心,在X轴和Y轴上均缩放40%的图像,最后在(0,0)点的位置绘制要缩放的图像的原图
MainActivity:
package com.example.test;  
  
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
  
public class MainActivity extends Activity {  


    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
      
      //获取布局文件中添加的帧布局管理器
        FrameLayout fl=(FrameLayout)findViewById(R.id.frameLayout1);
        //将自定义的MyView视图添加到帧布局
        fl.addView(new MyView(this));
	}
   
    public class MyView extends View{


		public MyView(Context context) {
			super(context);
			// TODO Auto-generated constructor stub
		}


		@Override
		protected void onDraw(Canvas canvas) {
		    Paint paint=new Paint();//定义一个画笔
		    paint.setAntiAlias(true);//设置抗锯齿
		    
		    Bitmap bitmap_bg=BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.backgroud);
		    canvas.drawBitmap(bitmap_bg, 0, 0, paint);//绘制背景
		    Bitmap bitmap_rabbit=BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.rabbit);
		    //应用setScale(float sx,float sy)方法缩放图像
		    Matrix m1=new Matrix();
		    m1.setScale(2f, 2f);//以(0,0)点为轴心在X轴和Y轴上均缩放200%
		    canvas.drawBitmap(bitmap_rabbit, m1, paint);//绘制图像并应用matrix的变换
		    //应用setScale(float sx,float sy,float px,float py)方法缩放图像
		    Matrix m2=new Matrix();
		    m2.setScale(0.4f, 0.4f,156,156);//以(156,156)点为轴心在X轴和Y轴上均缩放40%
		    canvas.drawBitmap(bitmap_rabbit, m2, paint);//绘制图像并应用matrix的变换
		    canvas.drawBitmap(bitmap_rabbit, 0, 0, paint);//绘制原图
			super.onDraw(canvas);
		}
    	
    }
}  

运行实例,效果如图所示




三.倾斜图像
使用Android提供的android.graphics.Matrix类的setSkew()、postSkew()和preSkew()方法,可以对图像进行缩放。

1.setSkew(float kx,float ky)
使用该语法格式可以对Matrix进行倾斜,参数kx和ky用于指定X轴和Y轴的上对的倾斜量。例如,创建一个Matrix对象,并将其在X轴上倾斜0.3,在Y轴上不倾斜,可以使用下面的代码:
Matrix m=new Matrix();
m.setSkew(0.3f,0);

2.setScale(float kx,float ky,float px,float py)
控制Matrix以px和py为轴心进行倾斜。例如,创建一个Matrix对象,并将其以(100,100)为轴心在X轴和Y轴上均倾斜0.1,可以使用下面的代码:
Matrix m=new Matrix();
m.setSkew(0.1f,0.1f,100,100);

下面写一个实例来实现应用Matrix倾斜图像:
用来显示自定义的绘图类的布局文件
res/layout/main.xml:
<?xml version="1.0" encoding="utf-8"?>  
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/frameLayout1"
    android:orientation="vertical"
    >
	
</FrameLayout>

打开MainActivity,在文件中创建名为MyView的内部类,继承android.view.View类,并添加构造方法和重写onDraw(Canvas canvas)方法,在里面进行作图:

首先定义一个画笔,并绘制一张背景图像,然后绘制以(0,0)点为轴心,在X轴上倾斜2,在Y轴上倾斜1的图像,在绘制以(178,169)为轴心,在X轴上倾斜-0.5的图像,最后在(0,0)点的位置绘制要倾斜的图像的原图
MainActivity:
package com.example.test;  
  
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
  
public class MainActivity extends Activity {  


    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
      
      //获取布局文件中添加的帧布局管理器
        FrameLayout fl=(FrameLayout)findViewById(R.id.frameLayout1);
        //将自定义的MyView视图添加到帧布局
        fl.addView(new MyView(this));
	}
   
    public class MyView extends View{


		public MyView(Context context) {
			super(context);
			// TODO Auto-generated constructor stub
		}


		@Override
		protected void onDraw(Canvas canvas) {
		    Paint paint=new Paint();//定义一个画笔
		    paint.setAntiAlias(true);//设置抗锯齿
		    
		    Bitmap bitmap_bg=BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.backgroud);
		    canvas.drawBitmap(bitmap_bg, 0, 0, paint);//绘制背景
		    Bitmap bitmap_rabbit=BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.rabbit);
		    //应用setSkew(float kx,float ky)方法倾斜图像
		    Matrix m1=new Matrix();
		    m1.setSkew(2f, 1f);//以(0,0)点为轴心,在X轴上倾斜2,在Y轴上倾斜1的图像
		    canvas.drawBitmap(bitmap_rabbit, m1, paint);//绘制图像并应用matrix的变换
		    //应用setSkew(float kx,float ky,float px,float py)方法倾斜图像
		    Matrix m2=new Matrix();
		    m2.setSkew(-0.5f, 0f,178,169);//以(178,169)为轴心,在X轴上倾斜-0.5的图像
		    canvas.drawBitmap(bitmap_rabbit, m2, paint);//绘制图像并应用matrix的变换
		    canvas.drawBitmap(bitmap_rabbit, 0, 0, paint);//绘制原图
			super.onDraw(canvas);
		}
    	
    }
}  

运行实例,效果如图所示



四.平移图像

使用Android提供的android.graphics.Matrix类的setTranslate()、postTranslate()和preTranslate()方法,可对图像进行平移。

1.setTranslate(float dx,float dy)
参数dx和dy用于指定将Matrix移动到的位置的x和y坐标。
例如,创建一个Matrix的对象,并将其平移到(100,50)的位置,可以使用下面的代码:
Matrix matrix=new Matrix();
matrix.setTranslate(100,50);

下面写一个实例来实现应用Matrix平移图像:
用来显示自定义的绘图类的布局文件
res/layout/main.xml:
<?xml version="1.0" encoding="utf-8"?>  
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/frameLayout1"
    android:orientation="vertical"
    >
	
</FrameLayout>

打开MainActivity,在文件中创建名为MyView的内部类,继承android.view.View类,并添加构造方法和重写onDraw(Canvas canvas)方法,在里面进行作图:

首先定义一个画笔,并绘制一张背景图像,然后在(0,0)点的位置绘制要缩放的图像的原图,再创建一个Matrix的对象,并将其旋转30度后平移到指定位置,最后绘制应用Matrix变换的图像,具体代码如下
MainActivity:
package com.example.test;  
  
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
  
public class MainActivity extends Activity {  


    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
      
      //获取布局文件中添加的帧布局管理器
        FrameLayout fl=(FrameLayout)findViewById(R.id.frameLayout1);
        //将自定义的MyView视图添加到帧布局
        fl.addView(new MyView(this));
	}
   
    public class MyView extends View{


		public MyView(Context context) {
			super(context);
			// TODO Auto-generated constructor stub
		}


		@Override
		protected void onDraw(Canvas canvas) {
		    Paint paint=new Paint();//定义一个画笔
		    paint.setAntiAlias(true);//设置抗锯齿
		    
		    Bitmap bitmap_bg=BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.backgroud);
		    canvas.drawBitmap(bitmap_bg, 0, 0, paint);//绘制背景
		    Bitmap bitmap_rabbit=BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.rabbit);
		    canvas.drawBitmap(bitmap_rabbit, 0, 0, paint);//绘制原图
		    //应用setSkew(float kx,float ky)方法倾斜图像
		    Matrix m1=new Matrix();
		    m1.setRotate(30);
		    m1.postTranslate(100, 50);
		    canvas.drawBitmap(bitmap_rabbit, m1, paint);//绘制图像并应用matrix的变换
		   
			super.onDraw(canvas);
		}
    	
    }
}  

运行实例,效果如图所示


转载请注明出处:http://blog.csdn.net/acmman/article/details/45601821

相关文章
|
1月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
65 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
1月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
179 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
1月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
56 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
2月前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
111 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
24天前
|
安全 Android开发 iOS开发
escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
escrcpy 是一款基于 Scrcpy 的开源项目,使用 Electron 构建,提供图形化界面来显示和控制 Android 设备。它支持 USB 和 Wi-Fi 连接,帧率可达 30-120fps,延迟低至 35-70ms,启动迅速且画质清晰。escrcpy 拥有丰富的功能,包括自动化任务、多设备管理、反向网络共享、批量操作等,无需注册账号或广告干扰。适用于游戏直播、办公协作和教育演示等多种场景,是一款轻量级、高性能的 Android 控制工具。
|
Android开发
【Android 内存优化】Bitmap 图像尺寸缩小 ( 设置 Options 参数 | inJustDecodeBounds | inSampleSize | 工具类实现 )
【Android 内存优化】Bitmap 图像尺寸缩小 ( 设置 Options 参数 | inJustDecodeBounds | inSampleSize | 工具类实现 )
499 0
|
4月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
2月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
43 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
3月前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
85 19
|
3月前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
110 14

热门文章

最新文章

  • 1
    Android历史版本与APK文件结构
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
  • 6
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 8
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
  • 9
    Android实战经验之Kotlin中快速实现MVI架构
  • 10
    即时通讯安全篇(一):正确地理解和使用Android端加密算法