`
呐小鱼干
  • 浏览: 27337 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

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



 本来想画一个萌萌哒的啥...但是我的绘画功底.....嗯,随意好啦

 

  • 大小: 4.3 KB
  • 大小: 9.4 KB
  • 大小: 49.7 KB
分享到:
评论

相关推荐

    Android代码-画图工具源码.zip

    7. **画笔粗细与透明度调节**:源码还可能包含画笔宽度和透明度的调整功能,这些通常是通过SeekBar控件实现,配合Paint对象的setStrokeWidth和setAlpha方法来改变画笔属性。 8. **撤销与重做功能**:通过保存每次...

    Android简单画图应用开发

    以上就是开发一个简单的Android画图应用所涉及的关键技术点,通过这些技术,我们可以创建一个功能丰富的画图工具,满足用户的基本需求。不过,实际开发过程中还需要考虑性能优化、用户体验等因素,以提供更优质的...

    Android 画图程序源码.rar

    通过分析这个源码,开发者可以学习到如何在Android平台上构建一个功能完备且用户友好的画图应用。同时,这样的项目也提供了一个很好的实践平台,帮助开发者提升对Android图形系统和事件处理机制的理解。

    android 交互式画图

    这个项目名为"InteractDraw",显然是一个实现简单画图功能的应用,提供了丰富的操作选项,如移动图形、调整形状、改变大小以及选择画笔颜色和粗细。下面我们将深入探讨这些知识点。 1. **Android绘图基础**:...

    android画图板

    本文将详细解析"android画图板"这个主题,介绍如何在Android中实现一个基本的画线功能,并探讨两种不同的实现方法。 首先,我们要了解Android中的画布(Canvas)和画笔(Paint)概念。Canvas是Android图形系统的一...

    Android画图工具源码.zip

    6. 用户交互:除了基本的绘图功能,画图工具通常还包含撤销/重做、选择颜色、改变画笔粗细等功能。这需要维护一个历史记录栈,每当用户绘制新内容时,将其推入栈中,撤销操作时则从栈顶弹出并重新绘制。 7. 数据...

    Android 画图工具源码.zip

    这份"Android 画图工具源码"将为我们揭示实现这些功能背后的细节。源码是学习和理解Android图形系统、触摸事件处理以及自定义View的好材料。 首先,Android的图形绘制主要依赖于`Canvas`和`Paint`对象。`Canvas`...

    Android 画笔 多线程画图工具

    这个工具不仅支持基本的绘画动作,如选择不同颜色、调整画笔粗细,还可以改变画笔形状,甚至实现橡皮擦功能以及撤销/重做操作。这些特性极大地增强了用户的创作体验,特别是在开发绘画应用或需要实时图形渲染的场景...

    android 手写、涂鸦demo

    在这个demo中,用户可以调整字体大小、颜色和画笔粗细,这些都是通过改变Paint对象的属性实现的。 4. **MotionEvent**:Android系统用于处理触摸事件的类。当用户在屏幕上触摸或移动手指时,会产生一系列...

    Android小画板

    本文将深入探讨这个小画板应用的核心功能和技术实现。 首先,"Android小画板"的基础是Android SDK,它是开发Android应用程序的基石。通过使用Java或Kotlin等编程语言,开发者构建了这个应用程序,让用户能够进行...

    Python 基础课程《1.python 小海龟画图基础》

    - **改变画笔粗细**:使用`t.pensize(size)`方法可以改变画笔的粗细。 - **隐藏小海龟**:使用`t.hideturtle()`可以让小海龟隐藏起来,只显示绘制的图形。 - **清除屏幕**:使用`t.clear()`可以清除当前屏幕上所有的...

    随手涂鸦 画板

    本文将深入解析如何使用Android Studio和核心组件Canvas、Paint以及Panel来创建一个简单的“随手涂鸦”画板应用。 首先,我们要了解Android应用的基本结构。一个标准的Android应用通常由多个组件构成,如Activity、...

    安卓手写功能源代码

    9. **手势识别与压力感应**:如果设备支持,还可以利用压力感应来改变线条的粗细,实现更真实的书写效果。 以上是实现【安卓手写功能源代码】涉及的主要技术点,通过这些技术,我们可以构建出一个功能完善的手写...

    手动绘制图案-画板

    此外,`DrawBoard`可能包含一个颜色选择器和画笔粗细调节功能,这需要额外的UI元素和逻辑。颜色可以通过设置`Paint`对象的`setColor()`方法改变,画笔粗细通过`setStrokeWidth()`设置。用户的选择可以通过`...

    圆环seekbar

    在实际开发过程中,我们可能会参考现有的开源库,如`android- circular-progress-bar`或`android-circleprogress`等,这些库已经实现了类似的功能,可以减少开发工作量。同时,通过阅读源码,可以学习到更多关于...

    涂鸦板设计开发

    用户界面还需要提供画笔颜色和粗细的选择,这可以通过颜色选择器和滑动条来实现。 其次,为了实现画笔功能,我们需要理解触摸事件的处理。在Android中,我们可以监听`MotionEvent`,捕捉ACTION_DOWN、ACTION_MOVE和...

    安卓自定义控件-点击产生圆圈水波纹效果

    `Paint`则用来设置绘制的颜色、样式、粗细等属性,是绘制过程中不可或缺的一部分。 1. **Canvas的使用**: - `onDraw()`方法:这是自定义控件绘制的核心,所有的画图操作都必须在这个方法内完成。当控件需要更新时...

    Android画画板的制作方法

    你需要为每个按钮的特定功能(如改变颜色、保存图片、涂色等)实现相应的方法。 6. **保存和分享**: - 为了保存用户的绘画,我们需要使用`Bitmap`的`compress()`方法将其转换为JPEG或PNG格式,并写入到文件系统中...

    安卓画板功能

    在画板应用中,用户可以选择不同颜色和粗细的笔触,这些功能通过`Paint`类实现。 2. **触摸事件处理**: - 安卓的`MotionEvent`类用于处理触摸屏幕的事件,如ACTION_DOWN(按下)、ACTION_MOVE(移动)和ACTION_UP...

Global site tag (gtag.js) - Google Analytics