Android作业四

例4_4

设计一个在屏幕上移动小球的程序

布局文件源码

<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="com.example.my4_1.MainActivity">

    <com.example.my4_1.TestView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/testview1"
        />

</LinearLayout>

设计图图形自定义组件

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

class TestView extends View {
    int x = 150, y = 50;

    public TestView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    void getXY(int _x, int _y) {//获取坐标
        x = _x;
        y = _y;
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawColor(Color.CYAN);
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setColor(Color.BLACK);
        canvas.drawCircle(x, y, 30, paint);//绘制圆
        paint.setColor(Color.WHITE);
        canvas.drawCircle(x - 9, y - 9, 6, paint);
        paint.setStrokeWidth(3);
        paint.setColor(Color.WHITE);
        canvas.drawRect(10, 10, 70, 70, paint);
    }
}

主控文件


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;

public class MainActivity extends AppCompatActivity {
    TestView tView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tView =(TestView)findViewById(R.id.testview1);
        tView.setOnTouchListener(new mOnTouch());
    }
    class mOnTouch implements View.OnTouchListener{
        public boolean onTouch(View v, MotionEvent event){
            int x1,y1;
            x1=(int)event.getX();
            y1=(int)event.getY();
            if(event.getAction()==MotionEvent.ACTION_DOWN){////绘制移动中的小球
                tView.getXY(x1,y1);
                if(x1<=10&&y1<=10){
                    MainActivity.this.finish();
                }
                tView.invalidate();
                return true;
            }
            else if(event.getAction()==MotionEvent.ACTION_MOVE){//绘制移动中的小球
                tView.getXY(x1,y1);
                if(x1<=10&&y1<=10){
                    MainActivity.this.finish();
                                                    }
                tView.invalidate();
                return true;
            }

            return tView.onTouchEvent(event);
        }
    }
}

结果图

在这里插入图片描述

例4_5

设计一个能在图片上涂鸦的文件

布局文件

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

    <com.example.my4_5.HandWrite
        android:layout_width="fill_parent"
        android:layout_height="380dp"
        android:id="@+id/handwriteview"
        />
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:gravity="center_horizontal">
       <Button
           android:layout_width="200dp"
           android:layout_height="wrap_content"
           android:text="clear"
           android:id="@+id/clear"/>
    </LinearLayout>
</LinearLayout>

主控文件


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    private HandWrite handWrite=null;
    private Button clear=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//此处调用主布局文件,与书本不一致
        handWrite=(HandWrite)findViewById(R.id.handwriteview);
        clear=(Button)findViewById(R.id.clear);
        clear.setOnClickListener(new mClick());
    }
    private class mClick implements View.OnClickListener{
        @Override
        public void onClick(View v) {
            handWrite.clear();
        }
    }
}

HandWrite.java


import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class HandWrite extends View {
    Paint paint=null;
    Bitmap originalBitmap=null;
    Bitmap new1_Bitmap=null;
    Bitmap new2_Bitmap=null;
    float startX=0,startY=0; //划线起点坐标
    float clickX=0,clickY=0;  //划线终点坐标
    boolean isMove=true;
    boolean isClear=false;
    int color= Color.GREEN;
    float strokeWidth=2.0f;
    public HandWrite(Context context, AttributeSet attrs){
        super(context,attrs);
        originalBitmap= BitmapFactory//获取原始资源
                .decodeResource(getResources(),R.drawable.icon)
                .copy(Bitmap.Config.ARGB_8888,true);
        new1_Bitmap=Bitmap.createBitmap(originalBitmap);//建立原始图像位置
    }
    public void clear(){
        isClear=true;
        new2_Bitmap=Bitmap.createBitmap(originalBitmap);
        invalidate();//清除图像
    }
    public void setstyle(float strokeWidth){
        this.strokeWidth=strokeWidth;
    }
    protected void onDraw(Canvas canvas){
        super.onDraw(canvas);
        canvas.drawBitmap(HandWriting(new1_Bitmap),0,0,null);
    }
    public Bitmap HandWriting(Bitmap o_Bitmap){
        Canvas canvas=null;
        if(isClear){
            canvas=new Canvas(new2_Bitmap);
        }
        else{
            canvas=new Canvas(o_Bitmap);
        }
        paint=new Paint();
        paint.setStyle(Paint.Style.STROKE);
        paint.setAntiAlias(true);
        paint.setColor(color);
        paint.setStrokeWidth(strokeWidth);
        if(isMove){//划线
            canvas.drawLine(startX,startY,clickX,clickY,paint);
        }
        startX=clickX;
        startY=clickY;
        if(isClear){
            return new2_Bitmap;//返回新图像
        }
        return o_Bitmap;//若清屏,返回原图像
    }
    public boolean onTouchEvent(MotionEvent event){
        clickX=event.getX();
        clickY=event.getY();
        if(event.getAction()==MotionEvent.ACTION_DOWN)
        {
            isMove=false;
            invalidate();
            return true;
        }
        else if(event.getAction()==MotionEvent.ACTION_MOVE){
            isMove=true;
            invalidate();
            return true;
        }
        return super.onTouchEvent(event);
    }
}

结果图

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Lxin12138/article/details/89053157