Android学习2-简单的实现画图功能(改变颜色和粗细)
学习android第2天~~~
实现了一个简单的画图功能(很简陋的那种....)主要用到的控件有imageview、dialog
1、activity_main.xml
每次第一步先做都是将页面的布局设置好,这次的页面布局很简单;
包括3个imageview作为按钮,button的区别在于,我们可以使用自定义的图片来作为按钮,我们可以点击其中一个来设置画笔颜色、粗细或者选择画固定的图形

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="18dp"
android:layout_marginStart="18dp"
android:layout_marginTop="17dp"
android:id="@+id/pen"
android:background="@drawable/pen"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/pen"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="10dp"
android:layout_marginEnd="10dp"
android:id="@+id/colors"
android:background="@drawable/color"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/shape"
android:layout_below="@+id/colors"
android:background="@drawable/shape"//加载背景图片
android:layout_alignTop="@+id/colors"
android:layout_centerHorizontal="true" />
//一下表示定义了一个画板(paintview是一个自定义的实现画图的类)
<com.example.lainka.paint1.paintview
android:id="@+id/paintview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/pen"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="13dp" />2、MainActivity.java
该activity主要实现了对页面控件点击事件的获取,通俗一点就是,实现了我们怎么知道我在页面上点了哪个按钮,pen 按钮(选择画笔粗细)还是color(选择颜色) 按钮或者shape(选择形状)。以及点了这三个按钮又应该做些什么;
以color为例,点击color之后弹出对话框,显示我们所有的颜色,如下:

获取页面上的控件
public class MainActivity extends AppCompatActivity {
public static final String[] C1={"红色","绿色","蓝色","黑色"};//用来表示页面上的颜色显示
public static final int[] C2={Color.RED,Color.GREEN,Color.BLUE,Color.BLACK};
public static final String[] P={"5","10","15","20"};//页面显示的画笔可以选择的粗细
public static final String[] S={"圆形","正方形","长方形"};//可以选择的图形
ImageView pen;
ImageView shape;
ImageView colors;
paintview block;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pen=(ImageView)findViewById(R.id.pen);
colors=(ImageView)findViewById(R.id.colors);
shape=(ImageView)findViewById(R.id.shape);
block=(paintview) findViewById(R.id.paintview);监听color按钮,并弹出对话框,改变画笔的粗细和改变形状和这个异曲同工
colors.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("选择一个颜色");
dialog.setItems(C1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
block.changecolor(C2[which]);//将页面上获取的到颜色传给paintview类,改变画笔的颜色
Toast.makeText(MainActivity.this,
"你点击了" + C1[which],
Toast.LENGTH_SHORT).show();
}
});
dialog.show();
}
});3、paintview.java 画图的实现
(1)改变颜色
public void changecolor(int str)//str对应activity中C2数组,相当于把c2数组中内容传递过来
{
p.setColor(str);//改变颜色
}(2)改变画笔粗细
public void changepen(int str)
{
p.setStrokeWidth(str);
}(3)改变形状
public void changeshape(String str)
{
if(str.equals("圆形"))
s=1;
else if(str.equals("正方形"))
s=2;
else if(str.equals("长方形"))
s=3;
}因为我们不能在画固定形状的同时又自己绘制图形,所以设定一个s的值来判断当前画图的方式
(4)ontouch函数,定义鼠标提起落下时进行的动作
public boolean onTouch(View v, MotionEvent e) {
// TODO Auto-generated method stub
Point p=new Point((int)e.getX(),(int)e.getY());
if(e.getAction()==e.ACTION_DOWN){ //当按下
pointall=new ArrayList<Point>();
pointall.add(p);
}
else if(e.getAction()==e.ACTION_UP){//当抬起
pointall.add(p);
paintview.this.postInvalidate(); //重绘
}
else if(e.getAction()==e.ACTION_MOVE){
pointall.add(p); //移动时候
paintview.this.postInvalidate(); //重绘
}
return true;
}(5)ondraw函数,开始画图啦啦啦啦
protected void onDraw(Canvas canvas){
//Paint p=new Paint(); //定义画笔
//p.setColor(Color.RED); //定义颜色
// p.setStrokeWidth(5);
if(pointall.size()>1){
Iterator<Point> iter=pointall.iterator();// 现在有坐标点保存的时候可以开始进行绘图
Point first=null;
Point last=null;
while(iter.hasNext()){
if(first==null){
first=(Point)iter.next();
}
else{
if(last!=null){
first=last; //将下一个坐标点赋给上面的
}
last=(Point)iter.next(); //不停下指
if(s==0)//自由画图
canvas.drawLine(first.x, first.y, last.x, last.y,p);
else if(s==1)//画圆
canvas.drawCircle(100f, 50f, 50f, p);
else if(s==2)//画正方形
canvas.drawRect(185, 70, 130, 120, p);
else if(s==3)//画长方形
canvas.drawRect(200, 130, 130, 180, p);
}
}
}4、have a try~~~

本来想画一个萌萌哒的啥...但是我的绘画功底.....嗯,随意好啦
相关推荐
xfcyhades 2020-11-20
Michael 2020-11-03
业余架构师 2020-10-09
OuNuo0 2020-09-29
moses 2020-09-22
Angelia 2020-09-11
qinxu 2020-09-10
刘炳昭 2020-09-10
Nostalgiachild 2020-09-07
Nostalgiachild 2020-08-17
leavesC 2020-08-14
一青年 2020-08-13
AndroidAiStudy 2020-08-07
ydc0 2020-07-30
绿豆饼 2020-07-28