标签: Camera拍照

Android Studio:使用Camera拍照(三)为相机增加取景蒙板/浮层

写在前面的话:每一个实例的代码都会附上相应的代码片或者图片,保证代码完整展示。*重要的是保证例程的完整性!!!方便自己也方便他人~欢迎大家交流讨论~

在相机预览时增加取景蒙板/浮层的思路是自定义View,用framelayout把自定义view放在surfaceview上面,在oncreat方法中计算坐标位置,调用自定义view中的set…方法设置坐标,根据坐标绘图。
接下来把上篇的自定义相机和增加蒙板那篇的代码结合起来,为相机增加取景蒙板/浮层,上代码!

新建一个Android项目
取名为Cameratwo,具体文件的命名如下

%title插图%num
values文件夹
strings.xml
<resources>
<string name=”app_name”>Cameratwo</string>
<string name=”button_name”>开始拍照</string>
</resources>

layout文件夹
activity_first.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:tools=”http://schemas.android.com/tools”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”vertical”
tools:context=”.FirstActivity”>

<Button
android:id=”@+id/button”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:onClick=”customCamera”
android:text=”@string/button_name” />

<ImageView
android:id=”@+id/iv”
android:layout_width=”match_parent”
android:layout_height=”match_parent” />

</LinearLayout>

custom.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<RelativeLayout
xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”vertical”>

<FrameLayout
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:layout_alignParentTop=”true”>

<SurfaceView
android:id=”@+id/preview”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:visibility=”visible” />

<com.example.administrator.cameratwo.TranslucencyView
android:id=”@+id/transView”
android:layout_width=”match_parent”
android:layout_height=”match_parent” />
</FrameLayout>

<ImageButton
android:id=”@+id/button3″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignParentBottom=”true”
android:layout_centerHorizontal=”true”
android:background=”@drawable/button3″
android:onClick=”capture” />
</RelativeLayout>

result.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout
xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”match_parent”
android:layout_height=”match_parent”>

<ImageView
android:id=”@+id/pic”
android:layout_width=”match_parent”
android:layout_height=”match_parent” />

</LinearLayout>

manifests
AndroidManifest.xml
在该文件中增加以下两项

<uses-permission android:name=”android.permission.CAMERA”/>
<uses-feature android:name=”android.hardware.Camera”/>
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>

<activity android:name=”.Customcamera”/>
<activity android:name=”.ResultActivity”/>

Java文件夹
FirstActivity
package com.example.administrator.cameratwo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;

public class FirstActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
}
public void customCamera(View view){
startActivity(new Intent(this,Customcamera.class));
}
}

 

Customcamera
这里完全没有用到Butter Knife 框架,因为我用的不熟,就删掉了orz…

package com.example.administrator.cameratwo;

import android.content.Intent;
import android.graphics.ImageFormat;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class Customcamera extends AppCompatActivity implements SurfaceHolder.Callback{
private Camera mCamera;
private SurfaceView mPreview;
private SurfaceHolder mHolder;
private int cameraId=1;
private int mHeight;

private Camera.PictureCallback mpictureCallback=new Camera.PictureCallback(){
@Override
public void onPictureTaken(byte[] data,Camera camera){
File tempfile=new File(“/sdcard/emp.png”);
try{ FileOutputStream fos =new FileOutputStream(tempfile);
fos.write(data);
fos.close();
Intent intent=new Intent(Customcamera.this,ResultActivity.class);
intent.putExtra(“picpath”,tempfile.getAbsolutePath());
startActivity(intent);
Customcamera.this.finish();
}
catch (IOException e){e.printStackTrace();}
}
};
@Override
protected void onCreate( Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom);
mPreview=findViewById(R.id.preview);
mPreview.setZOrderOnTop(false);
mHolder=mPreview.getHolder();
mHolder.setFormat(PixelFormat.TRANSPARENT);
mHolder.addCallback(this);
mPreview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCamera.autoFocus(null);
}
});
//获取imgButton的坐标,以便蒙板在imgButton处掏空,并获取页面参数
ImageButton imgButton=findViewById(R.id.button3);
TranslucencyView translucencyView=findViewById(R.id.transView);
imgButton.postDelayed(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
ImageButton imgButton=findViewById(R.id.button3);
mHeight = getSupportActionBar().getHeight();
int left = imgButton.getLeft();
int right = imgButton.getRight();
int top = imgButton.getTop();
int bottom = imgButton.getBottom();
int mCoodinate[] = {left, top, right, bottom};
TranslucencyView translucencyView=findViewById(R.id.transView);
translucencyView.setCircleLocation(mCoodinate);
}
});
}
},1200);
FrameLayout.LayoutParams layoutParams=(FrameLayout.LayoutParams) translucencyView.getLayoutParams();
translucencyView.setLayoutParams(layoutParams);
translucencyView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mCamera.autoFocus(null);
return false;
}
});
mHolder.lockCanvas();
}

public void capture(View view){
Camera.Parameters parameters=mCamera.getParameters();
parameters.setPictureFormat(ImageFormat.JPEG);
parameters.setPreviewSize(800,400);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
mCamera.autoFocus(new Camera.AutoFocusCallback(){
@Override
public void onAutoFocus(boolean success, Camera camera) {
if(success){mCamera.takePicture(null,null, mpictureCallback);}
}
});

}

@Override
protected void onResume() {
super.onResume();
if (mCamera==null){
mCamera=getCamera();
if(mHolder!=null){
setStartPreview(mCamera,mHolder);}
}
}

@Override
protected void onPause() {
super.onPause();
releaseCamera(); }

private Camera getCamera(){
Camera camera;
try{
camera=Camera.open(cameraId);
}
catch (Exception e){
camera=null;
e.printStackTrace(); }
return camera;
}

private void setStartPreview(Camera camera,SurfaceHolder holder){
try{
camera.setPreviewDisplay(holder);
camera.setDisplayOrientation(90);
camera.startPreview();
}
catch (Exception e){
e.printStackTrace(); }
}
private void releaseCamera(){
if(mCamera!=null){
mCamera.stopPreview();
mCamera.setPreviewCallback(null);
mCamera.release();
mCamera=null;
}
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
setStartPreview(mCamera,mHolder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
mCamera.stopPreview();
setStartPreview(mCamera,mHolder);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
releaseCamera();
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus); }

}

TranslucencyView
package com.example.administrator.cameratwo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathEffect;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.widget.ImageView;

public class TranslucencyView extends ImageView{
private final Context mContext;
private int[] mCircleLocation;//声明存放坐标的数组

public TranslucencyView(Context context){this(context,null);}
public TranslucencyView(Context context, AttributeSet attributeSet){this(context,attributeSet,0);}
public TranslucencyView(Context context,AttributeSet attributeSet,int defStyleAttr){
super(context,attributeSet,defStyleAttr);
this.mContext=context;
initView();
}

private void initView(){setBackgroundColor(Color.parseColor(“#7f000000”));}//设置半透明底色
public void setCircleLocation(int[] location){
this.mCircleLocation=location;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(mCircleLocation!=null){
//掏空一个圆形
Paint paintarc=new Paint(Paint.ANTI_ALIAS_FLAG);//创建一个画笔实例
PorterDuffXfermode porterDuffXfermode=new PorterDuffXfermode(PorterDuff.Mode.CLEAR);
paintarc.setXfermode(porterDuffXfermode);
paintarc.setAntiAlias(true);
RectF rectF=new RectF(mCircleLocation[0],mCircleLocation[1],mCircleLocation[2],mCircleLocation[3]);
canvas.drawArc(rectF,0,360,true,paintarc);
//画虚线
Paint paintdashed=new Paint(Paint.ANTI_ALIAS_FLAG);
paintdashed.setStyle(Paint.Style.STROKE);
paintdashed.setColor(Color.WHITE);
paintdashed.setStrokeWidth(5);
PathEffect pathEffect=new DashPathEffect(new float[]{10,10},0);
paintdashed.setPathEffect(pathEffect);
canvas.drawArc(rectF,0,360,true,paintdashed);
//画矩形框
/** Paint paintrect=new Paint(Paint.ANTI_ALIAS_FLAG);
PorterDuffXfermode porterDuffXfermode1=new PorterDuffXfermode(PorterDuff.Mode.CLEAR);
paintrect.setXfermode(porterDuffXfermode1);
paintrect.setAntiAlias(true);
//paintrect.setStrokeWidth(5);
canvas.drawRect(200, 400, 900, 1300, paintrect);*/
//画椭圆
Paint paintoval=new Paint(Paint.ANTI_ALIAS_FLAG);
PorterDuffXfermode porterDuffXfermode2=new PorterDuffXfermode(PorterDuff.Mode.CLEAR);
paintoval.setXfermode(porterDuffXfermode2);
paintoval.setAntiAlias(true);
//paintoval.setStrokeWidth(10);
canvas.drawOval(100,200,1000,1200,paintoval);
}
}
}

这里画了个椭圆,注意用的都是*对坐标,我估计在不同的手机中可能会出现适配问题,不过还没想好相对的怎么画啦

ResultActivity
这个的代码和之前的3.3ResultActivity.java代码一模一样,大家直接看
Android Studio:使用Camera拍照(二)自定义相机

小结
上完了代码,我要小结一下给相机加取景蒙版和之前一篇的直接添加(文章后面有附上)有什么差别,我*开始的时候确实是很简单的两处代码合在一起,然后执行时发现两个问题:
1.整个显示出来的是深蓝色的
2.在蒙版还没稳定出现前,surfaceview尚在预览,蒙板稳定出现后,surfaceview瞬间卡在了那时的页面
解决问题1:我又回去看了自定义相机的执行(那个项目叫startcamera),发现surfaceview从开始到预览确实有个从暗变深蓝再变浅的过程,于是我猜是 showMask() 方法(这个方法中的内容后来被单独拿出来放到了onCreate中)中设置的时间太短,该时间用于测量view是够了(因为蒙板能顺利显示,如果时间不够,整个页面其实会闪退),那就是通过intent传给TranslucencyActivity.java的时间太短,surfaceview还没构造完,intent就把坐标信息给TranslucencyActivity了,于是我把时间从500ms改到1200ms
解决问题2:其实从解决问题1的*后几句话已经能看出问题2的端倪了,就是原本的showMask() *后有几句代码:

Intent intent = new Intent(SecondActivity.this, TranslucencyActivity.class);
intent.putExtra(“Location”, mCoodinate);
startActivity(intent);

这就意味着信使不仅将坐标传给TranslucencyActivity,还打开了TranslucencyActivity!!那这个界面就把surfaceview定住了,因为TranslucencyActivity没有任何写预览的方法,它只是把自定义的view和自己的页面绑在一起,所以要弄取景框蒙板没有TranslucencyActivity任何事情,我就把它删掉了,其他所做的更改上面代码已详细给出。

执行效果:

%title插图%num

Android Studio:使用Camera拍照(二)自定义相机

写在前面的话:每一个实例的代码都会附上相应的代码片或者图片,保证代码完整展示。*重要的是保证例程的完整性!!!方便自己也方便他人~欢迎大家交流讨论~

1.新建一个Android项目,取名为startcamera
2.处理界面布局
2.1activity_startcamera.xml
2.2custom.xml
2.3result.xml
2.4strings.xml
3.编辑代码
3.1startcamera.java
3.2Customcamera.java
3.3ResultActivity.java
4.AndroidManifest.xml
1.新建一个Android项目,取名为startcamera
java文件:startcamera.java主文件
Customcamera.java,ResultActivity.java
layout文件:activity_startcamera.xml,custom.xml,result.xml

2.处理界面布局
2.1activity_startcamera.xml
定义一个放置开始拍照按钮的界面

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:tools=”http://schemas.android.com/tools”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”vertical”
tools:context=”.FirstActivity”>

<Button
android:id=”@+id/button”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:onClick=”customCamera”
android:text=”@string/button_name” />

<ImageView
android:id=”@+id/iv”
android:layout_width=”match_parent”
android:layout_height=”match_parent” />

</LinearLayout>

%title插图%num

2.2custom.xml
这个界面有拍照按钮和实时预览界面

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical”
android:layout_width=”match_parent”
android:layout_height=”match_parent”>

<Button
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:text=”@string/button_name1″
android:onClick=”capture”/>

<SurfaceView
android:id=”@+id/preview”
android:layout_width=”match_parent”
android:layout_height=”match_parent” />
</LinearLayout>

%title插图%num

2.3result.xml
这个界面用来显示拍照结果

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout
xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”match_parent”
android:layout_height=”match_parent”>
<ImageView
android:id=”@+id/pic”
android:layout_width=”match_parent”
android:layout_height=”match_parent” />

</LinearLayout>

2.4strings.xml
<resources>
<string name=”app_name”>startcamera</string>
<string name=”button_name”>开始拍照</string>
<string name=”button_name1″>capture</string>
</resources>

3.编辑代码
3.1startcamera.java
package com.example.administrator.startcamere;

import android.app.Activity;
import android.content.Intent;
import android.view.View;

public class startcamera extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_startcamera);
}

public void customCamera(View view){
startActivity(new Intent(this,Customcamera.class));
}
}

3.2Customcamera.java
在这里编辑自定义相机的代码

package com.example.administrator.startcamere;

import android.app.Activity;
import android.content.Intent;
import android.graphics.ImageFormat;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class Customcamera extends Activity implements SurfaceHolder.Callback{
private Camera mCamera;
private SurfaceView mPreview;
private SurfaceHolder mHolder;
private int cameraId=1;//声明cameraId属性,ID为1调用前置摄像头,为0调用后置摄像头。此处因有特殊需要故调用前置摄像头
//定义照片保存并显示的方法
private Camera.PictureCallback mpictureCallback=new Camera.PictureCallback(){
@Override
public void onPictureTaken(byte[] data,Camera camera){
File tempfile=new File(“/sdcard/emp.png”);//新建一个文件对象tempfile,并保存在某路径中
try{ FileOutputStream fos =new FileOutputStream(tempfile);
fos.write(data);//将照片放入文件中
fos.close();//关闭文件
Intent intent=new Intent(Customcamera.this,ResultActivity.class);//新建信使对象
intent.putExtra(“picpath”,tempfile.getAbsolutePath());//打包文件给信使
startActivity(intent);//打开新的activity,即打开展示照片的布局界面
Customcamera.this.finish();//关闭现有界面
}
catch (IOException e){e.printStackTrace();}
}
};
@Override
protected void onCreate( Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom);
mPreview=findViewById(R.id.preview);//初始化预览界面
mHolder=mPreview.getHolder();
mHolder.addCallback(this);
//点击预览界面聚焦
mPreview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCamera.autoFocus(null);
}
});
}
//定义“拍照”方法
public void capture(View view){
Camera.Parameters parameters=mCamera.getParameters();
parameters.setPictureFormat(ImageFormat.JPEG);//设置照片格式
parameters.setPreviewSize(800,400);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
//摄像头聚焦
mCamera.autoFocus(new Camera.AutoFocusCallback(){
@Override
public void onAutoFocus(boolean success, Camera camera) {
if(success){mCamera.takePicture(null,null, mpictureCallback);}
}
});

}
//activity生命周期在onResume是界面应是显示状态
@Override
protected void onResume() {
super.onResume();
if (mCamera==null){//如果此时摄像头值仍为空
mCamera=getCamera();//则通过getCamera()方法开启摄像头
if(mHolder!=null){
setStartPreview(mCamera,mHolder);//开启预览界面
}
}
}
//activity暂停的时候释放摄像头
@Override
protected void onPause() {
super.onPause();
releaseCamera();
}
//onResume()中提到的开启摄像头的方法
private Camera getCamera(){
Camera camera;//声明局部变量camera
try{
camera=Camera.open(cameraId);}//根据cameraId的设置打开前置摄像头
catch (Exception e){
camera=null;
e.printStackTrace(); }
return camera;
}
//开启预览界面
private void setStartPreview(Camera camera,SurfaceHolder holder){
try{
camera.setPreviewDisplay(holder);
camera.setDisplayOrientation(90);//如果没有这行你看到的预览界面就会是水平的
camera.startPreview();}
catch (Exception e){
e.printStackTrace(); }
}
//定义释放摄像头的方法
private void releaseCamera(){
if(mCamera!=null){//如果摄像头还未释放,则执行下面代码
mCamera.stopPreview();//1.首先停止预览
mCamera.setPreviewCallback(null);//2.预览返回值为null
mCamera.release(); //3.释放摄像头
mCamera=null;//4.摄像头对象值为null
}
}
//定义新建预览界面的方法
@Override
public void surfaceCreated(SurfaceHolder holder) {
setStartPreview(mCamera,mHolder);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
mCamera.stopPreview();//如果预览界面改变,则首先停止预览界面
setStartPreview(mCamera,mHolder);//调整再重新打开预览界面
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
releaseCamera();//预览界面销毁则释放相机
}
}

3.3ResultActivity.java
在这里编辑照片显示的代码

package com.example.administrator.startcamere;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.widget.ImageView;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class ResultActivity extends Activity {
@Override
protected void onCreate( Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.result);
String path=getIntent().getStringExtra(“picpath”);//通过值”picpath”得到照片路径
ImageView imageview=findViewById(R.id.pic);
try{FileInputStream fis=new FileInputStream(path);//通过path把照片读到文件输入流中
Bitmap bitmap=BitmapFactory.decodeStream(fis);//将输入流解码为bitmap
Matrix matrix=new Matrix();//新建一个矩阵对象
matrix.setRotate(270);//矩阵旋转操作让照片可以正对着你。但是还存在一个左右对称的问题
//新建位图,第2个参数至第5个参数表示位图的大小,matrix中是旋转后的位图信息,并使bitmap变量指向新的位图对象
bitmap=Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);
//将位图展示在imageview上
imageview.setImageBitmap(bitmap);}
catch (FileNotFoundException e){e.printStackTrace();}
//Bitmap bitmap=BitmapFactory.decodeFile(path);
}
}

4.AndroidManifest.xml
新增下列代码,设置用户权限

<uses-permission android:name=”android.permission.CAMERA”/>
<uses-feature android:name=”android.hardware.Camera”/>
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>

注册activity,否则系统找不到你另外新建的两个activity会报错

<activity android:name=”.Customcamera”/>
<activity android:name=”.ResultActivity”/>

Android Studio:使用Camera拍照(一)调用系统相机

写在前面的话:每一个实例的代码都会附上相应的代码片或者图片,保证代码完整展示。*重要的是保证例程的完整性!!!方便自己也方便他人~欢迎大家交流讨论~

(注:每处代码都会附上对应的代码片or图片)
1.新建一个Android项目,取名为startcamera。
java主文件(startcamera.java)
layout文件(activity_startcamerae.xml)

2.编辑activity_startcamerae.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:tools=”http://schemas.android.com/tools”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”vertical”
tools:context=”.startcamera”>

<Button
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:onClick=”startCamera”
android:text=”camera”/>
</LinearLayout>

%title插图%num

%title插图%num
3.编辑startcamera.java

package com.example.administrator.startcamere;

import android.app.Activity;
import android.content.Intent;
import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;

public class startcamera extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_startcamera);}
public void startCamera(View view){
Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(intent);
}
}

4.运行
运行模拟器or用USB连接真机开启USB调试模式即可看到执行效果

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速