zoukankan      html  css  js  c++  java
  • android多媒体编程--画画板

    package com.example.huahuaban;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Environment;
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.Bitmap.CompressFormat;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.graphics.PorterDuff.Mode;
    import android.graphics.PorterDuffXfermode;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.View.OnTouchListener;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity implements OnClickListener{
        private ImageView img;
        Bitmap bitmapcopy;
        Paint paint;
        Bitmap bitmapsrc ;
        float startx =0;
        float starty = 0;
        private Canvas canvas;
        private Matrix mt;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            img = (ImageView) findViewById(R.id.img);
            findViewById(R.id.red).setOnClickListener(this);
            findViewById(R.id.gereen).setOnClickListener(this);
            findViewById(R.id.blue).setOnClickListener(this);
            findViewById(R.id.shua).setOnClickListener(this);
            findViewById(R.id.qingkong).setOnClickListener(this);
            findViewById(R.id.save).setOnClickListener(this);
            bitmapsrc = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
            bitmapcopy = Bitmap.createBitmap(bitmapsrc.getWidth(), bitmapsrc.getHeight(), bitmapsrc.getConfig());
            //画笔
            paint = new Paint();
            canvas = new Canvas(bitmapcopy);
            mt = new Matrix();
            canvas.drawBitmap(bitmapsrc, mt, paint);
        
            img.setOnTouchListener(new OnTouchListener() {
                
                @Override
                public boolean onTouch(View arg0, MotionEvent event) {
                    int action = event.getAction();
                    
                    switch (action) {
                    case MotionEvent.ACTION_DOWN:
                        //设置线段的开始坐标
                        startx = event.getX();
                        starty = event.getY();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        //结束坐标
                        float x =  event.getX();
                        float y =  event.getY();
                        
                        canvas.drawLine(startx, starty, x, y, paint);
                        img.setImageBitmap(bitmapcopy);
                        //把结束坐标的值赋给开始坐标
                        startx = x;
                        starty = y;
                        break;
                    case MotionEvent.ACTION_UP:
                        
                        break;
    
                    }
                    return true;
                }
            });
        }
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.red:
                paint.setColor(Color.RED);
                break;
            case R.id.gereen:
                paint.setColor(Color.GREEN);
                break;
            case R.id.blue:
                paint.setColor(Color.BLUE);
                break;
            case R.id.qingkong:
                 paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));  
                 canvas.drawBitmap(bitmapsrc, mt, paint);
                 paint.setXfermode(new PorterDuffXfermode(Mode.SRC)); 
                 img.invalidate();
                break;
            case R.id.shua:
                paint.setStrokeWidth(3.5f);
                break;
            case R.id.save:
                File file = new File("sdcard/ok1.png");
                FileOutputStream out = null;
                try {
                    out = new FileOutputStream(file);
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                //保存文件,参数分别为格式,压缩质量0-100,输出流
                bitmapcopy.compress(CompressFormat.PNG, 100, out);
                //发送更新多媒体数据库的广播
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
                intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
                sendBroadcast(intent);
                break;
    
            
            }
            
        }
    
    }
    <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"
      
        tools:context=".MainActivity" 
        android:orientation="vertical">
    
        <ImageView
            android:id="@+id/img"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
           
            android:src="@drawable/bg"/>
        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            >
            <Button 
                android:id="@+id/red"
                android:background="#FF0000"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                
                />
            <Button 
                android:id="@+id/gereen"
                android:background="#00FF00"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                
                />
            <Button 
                android:id="@+id/blue"
                android:background="#3366FF"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                
                />
            <Button 
                android:id="@+id/shua"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="加粗"
                />
            <Button 
                android:id="@+id/qingkong"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="清空"
                />
        </LinearLayout>
             <Button 
                android:id="@+id/save"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="保存"
                />
    
    </LinearLayout>
  • 相关阅读:
    【转】java线程池ThreadPoolExecutor使用介绍
    java的类加载机制
    java面试问题分类
    ConcurrentHashMap总结
    ffmpeg对视频封装和分离
    SSM的整合
    单例模式的七种写法
    SecureCRT的快捷键
    linux下mysql常用命令
    maven操作
  • 原文地址:https://www.cnblogs.com/84126858jmz/p/4977199.html
Copyright © 2011-2022 走看看