android開發之畫圖版


android開發之畫圖版

一.新的開始,也是新的挑戰:

  • 開始學習java,除了剛開始的時候有些難,覺得難有些暈,慢慢接觸之后也就挺好的了, 學習了4天的安卓開發,完成了一個小程序,收獲還是不小的;有一些java的基礎,所以相對的畫圖板還是比較簡單(對於理解代碼而言);但是因為android和java有不一樣的地方,所以有些地方應該要注意;不管怎么說新鮮的東西,新的起點。頑張って。

 


 

二.初識android:

  • android開發,第一個印象就是,測試麻煩;要用虛擬機或者接上手機,第一次測試的時候,挺不習慣的。
  • 第二點:界面是在layout上面設置的,android開發像是把很多的東西都分門別類了一樣,有圖片的文件包,有id,有value包;所以說,剛開始的時候,了解每個包的作用是開始的第一步。
  • 在android開發中,有一點不習慣的是android的界面,並不像java中的那樣是畫在JFrame中。首先是在xml文件中用線性布局來設計的,一個垂直的線性布局(LinearLayout)中添加幾個水平的線性布局來使用。雖然剛開始的時候放了很多的錯誤,用錯了方法,不熟悉開發的軟件,不過最后還是完成了。下面是layout中組件與組件中控制距離的方法,
  • 另外和java不同的是,設置顏色的方法;在java中Color是一個類,但是android開發里面用的是十六進制來表示;雖然系統會自帶一些顏色,不過要定義新的顏色的時候,就不能像java中那樣,new 一個Color對象;而是:paint.setTextColor(0xffff00ff);//其中:0xffff00ff是int類型的數據,分組一下0x|ff|ff00ff,0x表示顏色整數的標記,ff表示透明度,ff00ff表示色值,注意:0x后面ffff00ff必須是8位的顏色表示。顏色和不透度 (alpha) 值以十六進制表示法表示。任何一種顏色的值范圍都是 0到 255(00到 ff)。對於 alpha,00表示完全透明,ff表示完全不透明。表達式順序是“aabbggrr”,其中“aa=alpha”(00到ff);“bb=blue”(00到ff);“gg=green”(00到ff);“rr=red”(00到ff)。
  • 設置顏色的幾種方法:
  • 在xml文件中設置顏色的方法只能是  android:textColor="#FFFFFF"

 


 

三.畫圖版:

  • 這次做了一個自己的畫圖版,因為之前已經寫過,所以花的時間不是很長,也比較容易,不過代碼中值得注意的是還是有很多的;
  • 第一點添加監聽:
  • 第一個就是監聽方法的不一樣:java中用的是add...,而android中使用的set...,android中OnClickListener用來監聽鼠標點擊相當於java中的ActionListener,OnTouchListener接口是用來處理手機屏幕事件的監聽接口,當為View的范圍內觸摸按下、抬起或滑動等動作時都會觸發該事件。
  •  protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button=(Button)findViewById(R.id.Button);//獲取按鈕對象; Loginlistenner l=new Loginlistenner(); button.setOnClickListener(l);//給按鈕加上監聽; l.setMa(this); }
  • @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); ImageView im=(ImageView)this.findViewById(R.id.imafeview1);//獲取事件對象 l=new Drawlisteners(this); im.setOnTouchListener(l);//給圖片加上監聽,也就是位圖要顯示的位置; }
  • 第二實現頁面的跳轉:
  • 當點擊之后要進入一個新的界面的時候使用的是Intent:
  1. Intent是一種運行時綁定(runtime binding)機制,它能在程序運行的過程中連接兩個不同的組件。 通過Intent,你的程序可以向Android表達某種請求或者意願,Android會根據意願的內容選擇適當的組件來響應。 Intent不僅可用於應用程序之間,也可用於應用程序內部的Activity/Service之間的交互。
  2. 代碼:在public void onClick(View v) {}中:
            Intent intent = new Intent(); intent.setClass(ma, DrawActivity.class); ma.startActivity(intent); //setClass函數的第一個參數是一個Context對象 //Context是一個類,Activity是Context類的子類,也就是說, //所有的Activity對象,都可以向上轉型為Context對象 //setClass函數的第二個參數是一個Class對象, //在當前場景下,應該傳入需要被啟動的Activity類的class對象
  • 第三:畫筆,畫布的實現(畫圖功能):
  • android中畫圖時 使用Paint畫筆,畫在Canvas畫布上,再存到Bitmap位圖上面,然后再把位圖放到ImagineView上面
  • 在當位圖為空時,在onTouch(View v, MotionEvent event){}函數中,創建位圖,然后根據位圖創建Canvas畫布上,代碼:
  • if (bt == null) { PaintFlagsDrawFilter mSetfil = new PaintFlagsDrawFilter(0, Paint.FILTER_BITMAP_FLAG); ima = (ImageView) v;// 獲取對象;
                bt = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888); cn = new Canvas(bt); cn.setDrawFilter(mSetfil); }
  • 然后是把畫布放到放到ImagineView上: ima.setImageBitmap(bt);
  • 第四:菜單:
  1. 在Activity函數里面重寫onCreateOptionsMenu方法新建一個菜單;同時在menu中新建一個菜單文件。
  2. Activity函數中的代碼:
    @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.draw, menu); return true; }
  3. 重寫activity類的 onOptionsItemSelected(MenuItem)回調方法,每當有菜單項被點擊時,android就會調用該方法,並傳入被點擊菜單項,代碼:
  4. @Override public boolean onOptionsItemSelected(MenuItem item) { l.setItemId(item.getItemId());//傳到監聽方法中去; return true; }
  5. 把item.getItemId()獲取的信息傳入listener類中(該類繼承了OnTouchListener),利用switch 語句來實現菜單功能;
  6. public void setItemId(int itemid) {
            switch (itemid) {
            case R.id.itm2:
                pain.setColor(0xffFF69B4);//
                break;
            case R.id.itm3:
                pain.setColor(0xff90EE90);//
                break;
            case R.id.ite2:
                // 畫一個空心圓,改變畫筆的風格; /*設置paint的 style 為STROKE:空心*/
                pain.setStyle(Style.STROKE);
                break;
            case R.id.ite1:
               pain.setStyle(Style.FILL);//fill為實心 break;
            case R.id.itme2:
                type = "line";
                break;
            case R.id.itme3:
                type = "oval";
                break; 
            }
    
        }
  7. 在onTouch(View v, MotionEvent event){}函數中(監聽方法中)實現畫圖功能;
    • MotionEvent.ACTION_DOWN:按下
    • MotionEvent.ACTION_UP:松開
    • MotionEvent.ACTION_MOVE:移動
    代碼:
    int action = event.getAction();
            switch (action) {
            case MotionEvent.ACTION_DOWN:
                x1 = event.getX();
                y1 = event.getY();
                if (type.equals("三角金字塔形")) {
                    drawsanjiaojinzita((int) x1, (int) y1);
                } else if (type.equals("角")) {
                    drawjiao();
                
                break;
            case MotionEvent.ACTION_UP:
                x2 = event.getX();
                y2 = event.getY();
                pain.setStrokeWidth((float) 3.0);
                if (type.equals("line")) {
                    cn.drawLine(x1, y1, x2, y2, pain);
                } else if (type.equals("path")) {
                    Path path4 = new Path();
                    path4.moveTo(x1, y1);
                    path4.lineTo(x2, y2);
                    path4.lineTo((x1 + 50), (y2 + 10));
                    path4.close();
                    cn.drawPath(path4, pain);// 畫一個三角形
                } else if (type.equals("文字")) {
                    pain.setTextSize(50);
                    cn.drawText("雅雅最棒", x1, y1, pain);
    
                } else if (type.equals("")) {
                    cn.drawLine(x1, y1, x2, y2, pain);
    
                }
    
                // cn.drawCoslor(Color.WHITE);//窗體會畫白;之前畫的圖形會消失;(新建);
                ima.setImageBitmap(bt);
                break;
        
            }
    
            return true;// 返回值false,表示該方法執行失敗,
            // 之前所有執行過的代碼都將回滾。
        }

     

  8.   在xml 文件中設置菜單顯示在窗體上<!-- android:showAsAction="always" 一直顯示在窗體上 -->
  •  使用畫筆和畫布的時候應該注意:
  1. 畫筆和畫布設置顏色可以使用十六進制或者使用系統自帶的顏色;
  2. 函數的不同:java中畫點是利用畫直線的方法,而android里面是有專門的方法:canvas.drawPoint((x3 + x), (y3 + y), paint);
  3. draw函數中的數值都是float型;
  4. 在畫矩形的函數中
    void android.graphics.Canvas.drawRect(float left, float top, float right, float bottom, Paint paint):left是矩形左邊的線,top是上面;right是右邊,bottom是下面的線。
  5. 畫圖的抗鋸齒效果(1)對畫筆進行抗鋸齒:pain.setAlpha(50);  pain.setAntiAlias(true);// 改變鋸齒狀;(2)創建一個Paint濾波器。 PaintFlagsDrawFilter mSetfil = new PaintFlagsDrawFilter(0, Paint.FILTER_BITMAP_FLAG);  canvas.setDrawFilter( mSetfil ); 第一個參數是你要清除的標志位,第二個參數是你要設置的標志位。此處設置為對位圖進行濾波;

 

  • 提示。點擊按鈕出現提示;顯示一個消息提示框,
  1. Toast.makeText(ma, button.getText().toString(),Toast.LENGTH_SHORT).show();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM