android 之 Camera使用示例
2015-05-31 18:57
447 查看
android类camera的使用, 实现各种3d变换
=================
布局就省略了, 整个app就两个类
=================
MainActivity.java:
MyView.java
运行界面:
=================
布局就省略了, 整个app就两个类
=================
MainActivity.java:
public class MainActivity extends Activity { Camera camera=new Camera(); MyView targetView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_cameta); targetView= (MyView) findViewById(R.id.target_view); ((SeekBar)findViewById(R.id.translateX)).setOnSeekBarChangeListener(new MySeekBarListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { targetView.setTranslateX(progress); } }); ((SeekBar)findViewById(R.id.translateY)).setOnSeekBarChangeListener(new MySeekBarListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { targetView.setTranslateY(progress); } }); ((SeekBar)findViewById(R.id.translateZ)).setOnSeekBarChangeListener(new MySeekBarListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { targetView.setTranslateZ(progress); } }); ((SeekBar)findViewById(R.id.rotateX)).setOnSeekBarChangeListener(new MySeekBarListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { targetView.setRotateX(progress); } }); ((SeekBar)findViewById(R.id.rotateY)).setOnSeekBarChangeListener(new MySeekBarListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { targetView.setRotateY(progress); } }); ((SeekBar)findViewById(R.id.rotateZ)).setOnSeekBarChangeListener(new MySeekBarListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { targetView.setRotateZ(progress); } }); } class MySeekBarListener implements SeekBar.OnSeekBarChangeListener{ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } } }
MyView.java
public class MyView extends View { Paint textPaint=new Paint(); Paint circlePaint=new Paint(); final String drawText="Test View"; int width,height; int curX,curY; // int radius; RectF rectF=new RectF(); // Camera camera=new Camera(); float transX,transY,transZ; float rotateX,rotateY,rotateZ; Matrix matrix=new Matrix(); public MyView(Context context, AttributeSet attrs) { super(context, attrs); textPaint.setAntiAlias(true); textPaint.setColor(Color.WHITE); textPaint.setStyle(Paint.Style.STROKE); textPaint.setTextSize(60); circlePaint.setAntiAlias(true); circlePaint.setColor(Color.RED); circlePaint.setStyle(Paint.Style.FILL_AND_STROKE); // radius= Utils.dp2px(context,40); setCirclePosition(); } private void setCirclePosition() { rectF.set(curX - radius, curY - radius, curX + radius, curY + radius); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); width=w; height=h; // Log.e("w h", width + " " + height); } @Override protected void onDraw(Canvas canvas) { // camera.save(); camera.translate(transX, transY, transZ); camera.rotate(rotateX, rotateY, rotateZ); camera.getMatrix(matrix); //绕(curX,curY)变换 matrix.preTranslate(-curX, -curY); matrix.postTranslate(curX,curY); camera.restore(); canvas.concat(matrix); //draw text canvas.drawText(drawText, 50, 50, textPaint); canvas.save(); canvas.rotate(90f, width / 2, height / 2); canvas.drawText(drawText, width / 2, height / 2, textPaint); canvas.restore(); //draw circle canvas.drawOval(rectF, circlePaint); } @Override public boolean onTouchEvent(MotionEvent event) { curX= (int) event.getX(); curY= (int) event.getY(); setCirclePosition(); invalidate(); return true; } public void setTranslateX(int progress) { transX=width*progress/100; invalidate(); } public void setTranslateY(int progress) { transY=width*progress/100; invalidate(); } public void setTranslateZ(int progress) { transZ=width*progress/100; invalidate(); } public void setRotateX(int progress) { rotateX=width*progress/100; invalidate(); } public void setRotateY(int progress) { rotateY=width*progress/100; invalidate(); } public void setRotateZ(int progress) { rotateZ=width*progress/100; invalidate(); } }
运行界面:
相关文章推荐
- Android内核开发:系统分区与镜像文件的烧写
- Android内核开发:系统分区与镜像文件的烧写
- android控制PC
- AndroidManifest.xml的权限总结
- Android开发_数据存储之SharedPreferences
- 【Android】拷贝文件到另一个目录下
- 介绍ModelViewPresenter在Android中的应用
- android基础之Handler的使用(一)
- Android基础之AndroidManifest.xml配置文件详解
- android基础之minSdkversion targetSdkVersion maxSdkversion 的区别
- Android基础之Android开发环境的搭建
- android基础之Unable to start activity Component
- Android 常用 adb 命令总结
- Android传感器常见显示程序
- 周末闲着无聊分享一个自己写的带呼吸效果的android水波纹自定义view
- Android FragmentPagerAdapter 数据刷新问题
- android网址
- Android 坐标与宽高研究getLeft() getTop() getRight()和getBottom()
- Android 4.4 原生屏幕录制使用详解
- android从相册中获取图片