例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.TestViewandroid: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;@Overrideprotected 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.HandWriteandroid:layout_width="fill_parent"android:layout_height="380dp"android:id="@+id/handwriteview"/><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"android:gravity="center_horizontal"><Buttonandroid: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;@Overrideprotected 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{@Overridepublic 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);}
}

结果图


Android作业四相关推荐

  1. 计算机术语所见即所得,计算机应用基础作业四(16页)-原创力文档

    <计算机应用基础>作业四 windows操作系统 填空题: 在windows98中,要运行"记事本",可以选择"开始"∣" "∣ ...

  2. 深蓝学院《从零开始手写VIO》作业四

    深蓝学院<从零开始手写VIO>作业四 深蓝学院<从零开始手写VIO>作业四 1. 信息矩阵分析 2. Bundle Adjustment信息矩阵的计算 深蓝学院<从零开始 ...

  3. Android中四种补间动画的使用示例(附代码下载)

    场景 Android中四种补间动画. 透明度渐变动画 旋转动画 缩放动画 平移动画 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的 ...

  4. 2017《面向对象程序设计》作业四

    2017<面向对象程序设计>作业四 林燊 031602325 https://www.cnblogs.com/linshen/ github链接:https://github.com/Tr ...

  5. android的四种启动模式,(转)彻底弄懂Activity四大启动模式

    原地址:https://blog..net/mynameishuangshuai/article/details/51491074 最近有几位朋友给我留言,让我谈一下对Activity启动模式的理解. ...

  6. 机器学习基石-作业四-代码部分

    这次的作业内容主要就是对带正则化项的线性规划的闭式解做各种操作:选择.把数据分成训练集和交叉验证.k-折交叉验证.完全套公式就可以了,这里唯一的一个问题就是偏移量参不参加正则化: 在林老师的课程中,最 ...

  7. 作业计算机组成与原理,课程计算机组成原理与汇编语言作业四

    课程计算机组成原理与汇编语言作业四 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 南京广播电视大学 开放教育计算机应用专业(专科)学 ...

  8. Android Espresso(四)——RecyclerView

    文章目录 Android Espresso(四)--RecyclerView RecyclerViewActions API RecyclerView已定义API测试代码 RecyclerView自定 ...

  9. 国开计算机网络 形考4,国开电大计算机网络(本)形考作业四参考答

    国开电大计算机网络(本)形考作业二参考答案_韩语学习_外语学习_教育专区 null 题目1.局域网的分类,按网络的拓扑结构划分,可分为星型.( )和环型局域网. A. 树型 B. 网状型 C. 网格型 ...

  10. Android Camera 四 Camera HAL 分析

    Android Camera 一 源码路径 Android Camera 二 JNI JAVA和C/CPP图像数据传输流程分析 Android Camera 三 CameraService 和 Cli ...

最新文章

  1. Java 构造方法与成员方法的区别
  2. python流程控制-python简单流程控制
  3. 构建物联网网络的4个关键步骤简介
  4. windows部署Apollo
  5. centos7搭建jenkins小记
  6. 汇编语言(三十二)之读写文件
  7. 小程序页面跳转的几个方法和区别
  8. asp.net网站编码测试
  9. linux ibus获取窗体位置,Ubuntu 12.04 显示ibus 的输入框
  10. [K/3Cloud]有关单据显示行数限制和数据导出的建议
  11. 微表情测试软件排行榜,微表情心理测试分析系统:以“微”见智,识情绪辨人心...
  12. JMeter并发测试工具
  13. 世界经典名车中英名称对照
  14. html加减乘除除数不能为零,0不能做除数(数学中0为什么不能做除数)
  15. Selenium使用自带浏览器自动化
  16. 2012最犀利语录大全
  17. 使用LIME解释CNN
  18. 一套OA系统需要多少钱?
  19. ubuntu新硬盘创建分区步骤
  20. 听歌什么蓝牙耳机好用?听歌比较好的蓝牙耳机推荐

热门文章

  1. Matlab R2008a破解
  2. [译] 人人都是设计师。我们可以的。
  3. socket连接测试工具,window和linux下
  4. java web对cpu要求_java web服务器cpu占用过高的处理
  5. crmeb java单商户源码java二开文档部署文档H5商城部署文档【5】
  6. 从编写c语言源程序到运行,c语言 源代码到可执行程序的过程
  7. js动态填充select
  8. 服务器内存傲腾基本参数信息,服务器装傲腾内存
  9. EasyUI后台管理系统
  10. MVPArms MVP+Dagger+Rxjava+Retrofit快速集成框架