android 模仿windows 自制画板

1.功能

      1.画笔大小调整

      2.画笔换色

      3.清除画布

2.代码实现

    xml:

   

<RelativeLayout 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" >

    <ImageView
        android:id="@+id/image"
        android:background="@drawable/bg"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scaleType="fitXY"
  />
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="60dip"
        android:layout_alignParentBottom="true"
         >
        <Button 
            android:id="@+id/red"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="红色"
	        android:onClick="onClick"
	        />
	    <Button 
	        android:id="@+id/yellow"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="黄色"
	        android:onClick="onClick"
	        />
	    
	    <Button 
	        android:id="@+id/clear"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="清除"
	        android:onClick="onClick"
	        />
	 
	    <SeekBar
	        android:id="@+id/seekBar1"
	        android:max="20"
	        android:layout_width="match_parent"
	        android:layout_height="wrap_content"
	        android:layout_weight="1" />
	</LinearLayout>
        

</RelativeLayout>

MainActivity:

public class MainActivity extends Activity implements OnSeekBarChangeListener,
        OnTouchListener {
    private ImageView imageView;
    private SeekBar seekbar;
    private Bitmap coptyBitmap;
    private Paint paint;
    private Canvas canvas;
    private int startX;
    private int startY;
    private Bitmap bitmap;
    private Display defaultDisplay;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.image);
        seekbar = (SeekBar) findViewById(R.id.seekBar1);

        bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.bg);//加载背景图片

        defaultDisplay = getWindowManager().getDefaultDisplay();
        paint = new Paint();//初始化画笔
        initCanvas();
        imageView.setOnTouchListener(this);
        seekbar.setOnSeekBarChangeListener(this);

    }

    private void initCanvas() {
        int width=defaultDisplay.getWidth();//拿屏幕的宽
        int height=defaultDisplay.getHeight();//拿到屏幕的高
        coptyBitmap = bitmap.createBitmap(width,height, bitmap.getConfig());
        canvas = new Canvas(coptyBitmap);//创建画布
        canvas.drawBitmap(bitmap, new Matrix(), paint);//把bitmap画到,画布中
        imageView.setImageBitmap(coptyBitmap);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
            boolean fromUser) {

        paint.setStrokeWidth(progress);
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub
    }
    public void onClick(View view) {
        switch (view.getId()) {
        case R.id.yellow:
            paint.setColor(Color.YELLOW);//设置画笔颜色
            break;
        case R.id.red:
            paint.setColor(Color.RED);
            break;
        case R.id.clear://清除画布
            initCanvas();
            break;
        }
    }

    @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 x = (int) event.getX();
            int y = (int) event.getY();
            canvas.drawLine(startX, startY, x, y, paint);//画线
            
            startX = x;
            startY = y;
            imageView.setImageBitmap(coptyBitmap);
            break;
        case MotionEvent.ACTION_UP:
            break;
        }
        return true;
    }

}
以上完成。

android 模仿windows 自制画板_第1张图片


   

你可能感兴趣的:(android 模仿windows 自制画板)