安卓小案例收集四(多媒体)

加载大图片

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

  public void click(View v){
    Options opts = new Options();
    //只请求图片宽高,不解析图片像素
    opts.inJustDecodeBounds = true;
    //返回null,获取图片宽高,保存在opts对象中
    BitmapFactory.decodeFile("sdcard/dog.jpg", opts);
    //获取图片宽高
    int imageWidth = opts.outWidth;
    int imageHeight = opts.outHeight;

    //获取屏幕宽高
    Display dp = getWindowManager().getDefaultDisplay();
int screenWidth = dp.getWidth();
    int screenHeight = dp.getHeight();

    //计算缩放比例
    int scale = 1;
    int scaleWidth = imageWidth / screenWidth;
    int scaleHeight = imageHeight / screenHeight;

    //判断取哪个比例
    if(scaleWidth >= scaleHeight && scaleWidth > 1){
        scale = scaleWidth;
    }
    else if(scaleWidth < scaleHeight && scaleHeight > 1){
        scale = scaleHeight;
    }

    //设置缩小比例
    opts.inSampleSize = scale;
    opts.inJustDecodeBounds = false;
    //获取缩小后的图片的像素信息
    Bitmap bm = BitmapFactory.decodeFile("sdcard/dog.jpg", opts);

    ImageView iv = (ImageView) findViewById(R.id.iv);
    iv.setImageBitmap(bm);

  }

创建图片副本

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

    //加载原图
    Bitmap bmSrc = BitmapFactory.decodeResource(getResources(), R.drawable.photo3);

    //创建副本
    //1.创建与原图一模一样大小的bitmap对象,该对象中目前是没有内容的,可以比喻为创建了和原图一样大小的白纸
    Bitmap bmCopy = Bitmap.createBitmap(bmSrc.getWidth(), bmSrc.getHeight(), bmSrc.getConfig());
    //2.创建画笔对象
    Paint paint = new Paint();
    //3.创建画板,把白纸铺到画板上
    Canvas canvas = new Canvas(bmCopy);
    //4.开始作画
    canvas.drawBitmap(bmSrc, new Matrix(), paint);

    ImageView iv_src = (ImageView) findViewById(R.id.iv_src);
    iv_src.setImageBitmap(bmSrc);
    ImageView iv_copy = (ImageView) findViewById(R.id.iv_copy);
    iv_copy.setImageBitmap(bmCopy);
}

简单图片特效

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //加载原图
    Bitmap bmSrc = BitmapFactory.decodeResource(getResources(), R.drawable.photo3);

    //创建副本
    //1.创建与原图一模一样大小的bitmap对象,该对象中目前是没有内容的,可以比喻为创建了和原图一样大小的白纸
    Bitmap bmCopy = Bitmap.createBitmap(bmSrc.getWidth(), bmSrc.getHeight(), bmSrc.getConfig());
    //2.创建画笔对象
    Paint paint = new Paint();
    //3.创建画板,把白纸铺到画板上
    Canvas canvas = new Canvas(bmCopy);

    Matrix mt = new Matrix();

    //平移效果,指定平移距离
//        mt.setTranslate(20, 10);
    //缩放效果,指定缩放比例
//        mt.setScale(2, 0.5f, bmCopy.getWidth() / 2, bmCopy.getHeight() / 2);
    //旋转效果
//        mt.setRotate(45, bmCopy.getWidth() / 2, bmCopy.getHeight() / 2);

    //镜面效果
//        mt.setScale(-1, 1);
//        mt.postTranslate(bmCopy.getWidth(), 0);

    //倒影效果
    mt.setScale(1, -1);
    mt.postTranslate(0, bmCopy.getHeight());

    canvas.drawBitmap(bmSrc, mt, paint);

    ImageView iv_src = (ImageView) findViewById(R.id.iv_src);
    iv_src.setImageBitmap(bmSrc);
    ImageView iv_copy = (ImageView) findViewById(R.id.iv_copy);
    iv_copy.setImageBitmap(bmCopy);
}

画板

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Bitmap bmSrc = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
    //白纸
    bmCopy = Bitmap.createBitmap(bmSrc.getWidth(), bmSrc.getHeight(), bmSrc.getConfig());
    //笔
    paint = new Paint();
    //画板
    canvas = new Canvas(bmCopy);
    //作画
    canvas.drawBitmap(bmSrc, new Matrix(), paint);

    iv = (ImageView) findViewById(R.id.iv);
    iv.setImageBitmap(bmCopy);

    iv.setOnTouchListener(new OnTouchListener() {

        //用户手指只要触摸屏幕,就会产生触摸事件
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            //判断触摸事件的类型
            switch (event.getAction()) {
            //手指触摸
            case MotionEvent.ACTION_DOWN:
                //触摸事件中会包含手指触摸的坐标
                startX = (int) event.getX();
                startY = (int) event.getY();
                break;
                //手指滑动
            case MotionEvent.ACTION_MOVE:
                int newX = (int) event.getX();
                int newY = (int) event.getY();
                //指定线的起点和终点
                canvas.drawLine(startX, startY, newX, newY, paint);
                iv.setImageBitmap(bmCopy);

                //把本此画线的终点设置为下一次画线的起点
                startX = newX;
                startY = newY;
                break;
                //手指抬起
            case MotionEvent.ACTION_UP:
                break;

            }
            //true表示告诉系统,这个触摸事件由iv处理
            //false表示不处理该触摸事件,事件往上传递
            return true;
        }
    });
}

public void red(View v){
    paint.setColor(Color.RED);
}

public void green(View v){
    paint.setColor(Color.GREEN);
}

public void brush(View v){
    //改变线条粗细
    paint.setStrokeWidth(8);
}

public void save(View v){
    File file = new File("sdcard/dazuo.png");
    FileOutputStream fos;
    try {
        fos = new FileOutputStream(file);
        //把图片压缩到本地文件
        bmCopy.compress(CompressFormat.PNG, 100, fos);
        fos.close();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    //手动发一个sd卡就绪广播
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
    intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
    sendBroadcast(intent);
}

模拟撕衣服

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //加载图片
    Bitmap bmSrc = BitmapFactory.decodeResource(getResources(), R.drawable.big2);
    final Bitmap bmCopy = Bitmap.createBitmap(bmSrc.getWidth(), bmSrc.getHeight(), bmSrc.getConfig());
    Paint paint = new Paint();
    Canvas canvas = new Canvas(bmCopy);
    canvas.drawBitmap(bmSrc, new Matrix(), paint);

    final ImageView iv = (ImageView) findViewById(R.id.iv);
    iv.setImageBitmap(bmCopy);

    iv.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_MOVE:
                int x = (int) event.getX();
                int y = (int) event.getY();

                //把该坐标对应的像素,置为透明色
                for (int i = -5; i < 5; i++) {
                    for (int j = -5; j < 5; j++) {
                        if(Math.sqrt(i*i + j*j) <= 5){
                            if(x + i < bmCopy.getWidth() && y + j < bmCopy.getHeight()
                                    && x + i >= 0 && y + j >= 0)
                            //把指定坐标的像素置为指定的颜色
                            bmCopy.setPixel(x + i, y + j, Color.TRANSPARENT);
                        }
                    }
                }
                iv.setImageBitmap(bmCopy);
                break;

            }
            return true;
        }
    });
}

视频播放

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SurfaceView sv = (SurfaceView) findViewById(R.id.sv);
    //获取surfaceview的控制器
    final SurfaceHolder holder = sv.getHolder();

//      Thread t = new Thread(){
//          @Override
//          public void run() {
//              try {
//                  sleep(200);
//              } catch (InterruptedException e) {
//                  // TODO Auto-generated catch block
//                  e.printStackTrace();
//              }
//              runOnUiThread(new Runnable() {
//                  @Override
//                  public void run() {
//                      MediaPlayer player = new MediaPlayer();
//                      player.reset();
//                      try {
//                          player.setDataSource("sdcard/2.3gp");
//                          //指定视频播放在哪个surfaceview
//                          player.setDisplay(holder);
//                          player.prepare();
//                          player.start();
//                      } catch (Exception e) {
//                          // TODO Auto-generated catch block
//                          e.printStackTrace();
//                      }
//                  }
//              });
//          }
//      };
//      t.start();

    holder.addCallback(new Callback() {
        //surfaceview销毁时会调用
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            if(player != null){
                //停止之前先保存播放进度
                progress = player.getCurrentPosition();
                player.stop();
                player.release();
                player = null;
            }
        }
        //surfaceview创建时会调用
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            if(player == null){
                player = new MediaPlayer();
                player.reset();
                try {
                    player.setDataSource("sdcard/2.3gp");
                    //指定视频播放在哪个surfaceview
                    player.setDisplay(holder);
                    player.prepare();
                    //跳转到上一次停止的地方继续播放
                    player.seekTo(progress);
                    player.start();
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }

        //surfaceview结构改变时会调用
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {
            // TODO Auto-generated method stub

        }
    });
}

VideoView

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    VideoView vv = (VideoView) findViewById(R.id.vv);
    vv.setVideoPath("sdcard/2.3gp");
    vv.start();
}

照相和拍摄

public void click1(View v){
    //启动拍照的Activity
    Intent intent = new Intent();
    intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File("sdcard/haha.jpg")));
    startActivityForResult(intent, 10);
}

public void click2(View v){
    //启动拍照的Activity
    Intent intent = new Intent();
    intent.setAction(MediaStore.ACTION_VIDEO_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File("sdcard/haha2.3gp")));
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);

    startActivityForResult(intent, 20);

}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == 10){
        Toast.makeText(this, "拍照完毕", 0).show();
    }
    else if(requestCode == 20){
        Toast.makeText(this, "摄像完毕", 0).show();
    }
}

拍照预览

public class MainActivity extends Activity {

     private Camera mCamera;
        private CameraPreview mPreview;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            if(checkCameraHardware(this)){
                // 创建摄像头实例
                mCamera = getCameraInstance();
            }
            else{
                return;
            }
            //创建预览类的对象
            mPreview = new CameraPreview(this, mCamera);
            FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
            //把预览类设置为帧布局的子节点
            preview.addView(mPreview);

         // 给按钮设置点击侦听
            Button captureButton = (Button) findViewById(R.id.button_capture);
            captureButton.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //自动聚焦
                        mCamera.autoFocus(new AutoFocusCallback() {

                            //聚焦完成调用
                            @Override
                            public void onAutoFocus(boolean success, Camera camera) {
                                 // 拍照
                                mCamera.takePicture(null, null, mPicture);

                            }
                        });

                    }
                }
            );
        }

    /** 检测手机是否有摄像头 */
    private boolean checkCameraHardware(Context context) {
        //检测手机是否安装有摄像头应用
        if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
            // this device has a camera
            return true;
        } else {
            // no camera on this device
            return false;
        }
    }

    /** 一个获取摄像头实例的安全途径 */
    public static Camera getCameraInstance(){
        Camera c = null;
        try {
            c = Camera.open(); // 获取第一个后置摄像头的实例
        }
        catch (Exception e){
            // Camera is not available (in use or does not exist)
        }
        return c; // returns null if camera is unavailable
    }

    private PictureCallback mPicture = new PictureCallback() {

        //拍照会调用此方法
        //data:照片的字节数组
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            try {
                File pictureFile = new File("sdcard/mrplus.jpg");
                FileOutputStream fos = new FileOutputStream(pictureFile);
                fos.write(data);
                fos.close();
            } catch (FileNotFoundException e) {
                Log.d(CameraPreview.TAG, "File not found: " + e.getMessage());
            } catch (IOException e) {
                Log.d(CameraPreview.TAG, "Error accessing file: " + e.getMessage());
            } finally{
                //拍照完成后重新进入预览
                camera.startPreview();
            }
        }
    };

}

预览类:

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
    public static final String TAG = "camera";
    private SurfaceHolder mHolder;
    private Camera mCamera;

    public CameraPreview(Context context, Camera camera) {
        super(context);
        mCamera = camera;

        // Install a SurfaceHolder.Callback so we get notified when the
        // underlying surface is created and destroyed.
        //获取surfaceview的控制器
        mHolder = getHolder();
        //设置侦听
        mHolder.addCallback(this);
        // deprecated setting, but required on Android versions prior to 3.0
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    public void surfaceCreated(SurfaceHolder holder) {
        // The Surface has been created, now tell the camera where to draw the preview.
        try {
            //设置摄像头的预览界面显示在holder对应的那个surfaceview
            mCamera.setPreviewDisplay(holder);
            //开始预览
            mCamera.startPreview();
        } catch (IOException e) {
            Log.d(TAG, "Error setting camera preview: " + e.getMessage());
        }
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        // empty. Take care of releasing the Camera preview in your activity.
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        // If your preview can change or rotate, take care of those events here.
        // Make sure to stop the preview before resizing or reformatting it.

        if (mHolder.getSurface() == null){
          // preview surface does not exist
          return;
        }

        // 在对surfaceview做改变前,先停止预览
        try {
            mCamera.stopPreview();
        } catch (Exception e){
          // ignore: tried to stop a non-existent preview
        }

        // set preview size and make any resize, rotate or
        // reformatting changes here

        // 设置改变完后,重新开始预览
        try {
            mCamera.setPreviewDisplay(mHolder);
            mCamera.startPreview();

        } catch (Exception e){
            Log.d(TAG, "Error starting camera preview: " + e.getMessage());
        }
    }
}
时间: 2024-10-16 15:24:18

安卓小案例收集四(多媒体)的相关文章

安卓小案例收集二

收集二 SQLite数据库 ListView使用 ArrayAdapter和SimpleAdapter的使用 网络请求下载图片 子线程刷新页面Handler的使用网络请求必须在子线程 带缓存的图片下载 使用SmartImageView 工具包loopj 请求html页面并显示其代码 模拟一个新闻客户端 get方式提交表单 post方式提交 使用HttpClient提交表单 异步HttpClient 收集二 SQLite数据库 OpenHelper类: public class MyOpenHel

安卓小案例收集三

收集三 对话框 多线程下载断点续传 XUtils的使用 Activity跳转 Intent跳转并携带数据IntentBundle携带 Activity销毁时传递数据 Receiver案例 ip拨号器示例 短信拦截 SD卡状态监听 流氓软件 应用的安装卸载监听 发送无序广播 优先级及最终接受者 服务 启动停止 电话录音服务 服务的两种启动方式 中间人服务 音乐播放 通过服务手动启动广播接受者 收集三 对话框 public void click1(View v){ //创建对话框创建器 AlertD

安卓小案例收集五(内容提供者、动画)

内容提供者 获取系统短息 插入系统短信 获取系统联系人 插入联系人 内容观察者 Fragment Fragment数据传递 帧动画 补间动画 属性动画 内容提供者 配置: <provider android:name="com.itheima.mycontentprovider.PersonProvider" android:authorities="com.itheima.people" android:exported="true"&g

Python学习第四天学习写的小案例(主要是针对 分支/循环的学习)

Python学习第四天学习写的小案例 (2019/07/17) 第一题:使用while循环输出1 2 3 4 5 6 8 9 10 程序代码: s = 0 while s<10: if s==6: s += 1 # 当数字为7的时候输出一个空格出来 print(end=' ') continue s += 1 print(s,end=' ') 运行结果: 1 2 3 4 5 6 8 9 10 第二题: 求1-100的所有数的和 程序代码: count = 0 for i in range(101

DOM的小疑问收集(2)

1.获取元素的四种方式document.getElementsBy/Id(),TagName,Name,ClassName;2.添加事件的三种方式第一种:<input type="button" value="按钮" onclick="f1();">function f1(){    alert("第一种写法"):}第二种:<input type="button" value="

宝宝情商教育 小案例

一. 父母健康的教养方式与示范作用 家庭是孩子人生的第一个环境,亲子关系是孩子建立的第一个人际关系.孩子对待自己的情绪和环境的态度很大程度上是在家庭中形成的.父母的教养方式,家庭内部的氛围对孩子情商的发展起着至为关键的作用. 比如我们上面讲到影响情商的要素中的敏感程度.人对痛苦的敏感程度不同,跟早期的童年生活环境和父母的教养态度有直接关系.早年困苦的孩子相对于家境富 裕的孩子更容易忍受物质的困乏和身体的劳累,农村的孩子往往比城市的孩子更努力.但是父母的教养方式和教育要求对孩子也起到极大程度的左右

安卓实训第四天--基于HttpClient来完成数据在服务器和设备间的交互。

上午:老师首先回顾了昨天作业. 首先在安卓工程中的TOOLS文件中,解析字节流那里,不用改变,而是把服务器端的编码方式变为UTF-8,然后将在安卓工程的LoginActivity类中的USERNAME给他强制转换下. 总结一句话:如果一个字符通过某个编码转换成字节码之后,那你在转换的时候必须拿到转换之前的字节码 补充:如何改变mysql连接工具的编码方式: jdbc:mysql://localhost:3306/databasename?useUnicode=true&characterEnco

ios基础-小知识点收集(1)

不积跬步,无以至千里;不积小流,无以成江海.----荀子 收集学习ios中的小知识点,每天进步一点点. (一)@class和 #import class:只声明类,不会引入类文件,加快编译速度,防止类相互import出错:在m中仍然需要import整个类文件. import导入整个类文件,在需要使用类中的变量.函数和协议的时候需要使用. (二)静态变量static.全局变量extern.局部变量.实例变量 static:为整类而非单个对象使用,隐藏封装在类中,对外不可见. 静态变量的优点: 1.

02SpringMvc_springmvc快速入门小案例(XML版本)

这篇文章中,我们要写一个入门案例,去整体了解整个SpringMVC. 先给出整个项目的结构图: 第一步:创建springmvc-day01这么一个web应用 第二步:导入springioc,springweb , springmvc相关的jar包 第三步:在/WEB-INF/下创建web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.