Android studio實現畫板功能
簡單概述
在日常生活中,我們經常會突發一些奇思妙想,或是一個畫面,或是幾個符號。這時候無法使用拍照或者打字功能實現,想拿筆記下又身邊找不到筆。於是我琢磨能不能做一個手機端的畫板。
效果圖
實現過程
項目佈局很簡單
讓我們來看代碼:首先聲明畫筆,畫板,和坐標
public class MainActivity extends AppCompatActivity{ Paint paint; Canvas canvas; ImageView imageview; Bitmap bitmap,newbitmap; TextView tv_stroke; int startX, startY, endX, endY; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_paint_tools); LinearLayout ll_layout = findViewById(R.id.ll_layout); RadioGroup rg_color = findViewById(R.id.rg_color);
遍歷單選按鈕,當單選按鈕選中時,獲取單選按鈕顏色並將畫筆顏色設置當前按鈕的文本顏色,最後註意要設置畫筆寬度,以免在後面點橡皮擦的時候畫筆寬度調不回來
for (int i = 0;i<rg_color.getChildCount();i++){ RadioButton rb = (RadioButton) rg_color.getChildAt(i); rb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (buttonView.isChecked()){ paint.setColor(buttonView.getTextColors().getDefaultColor()); paint.setStrokeWidth(5); } } }); }
首先創建一張空白圖片和一張灰色畫佈,將圖片放在畫佈上面
註冊觸摸監聽事件,獲取鼠標按下時的坐標和鼠標移動後的坐標。在開始和結束之間畫一條直線並更新畫佈圖片
imageview.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch(event.getAction()){ case MotionEvent.ACTION_DOWN: Log.i("MyPaintToolsActivity","ACTION_DOWN"); startX = (int) (event.getX()/1.4); startY = (int) (event.getY()/1.4); break; case MotionEvent.ACTION_MOVE: Log.i("MyPaintToolsActivity","ACTION_MOVE"); endX = (int) (event.getX()/1.4); endY = (int) (event.getY()/1.4); canvas.drawLine(startX,startY,endX,endY,paint); startX = (int) (event.getX()/1.4); startY = (int) (event.getY()/1.4); imageview.setImageBitmap(bitmap); break; case MotionEvent.ACTION_UP: Log.i("MyPaintToolsActivity","ACTION_UP"); break; } imageview.invalidate(); return true; } });
清屏的話就一行代碼 ,剩下的是重新生成一塊畫佈
Button btn_clear = findViewById(R.id.btn_clear); btn_clear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { canvas.drawColor(0,PorterDuff.Mode.CLEAR); bitmap = Bitmap.createBitmap(888,1200,Bitmap.Config.ARGB_8888); canvas = new Canvas(bitmap); canvas.drawColor(Color.argb(100,0,0,0)); paint = new Paint(); paint.setStrokeWidth(5); paint.setAntiAlias(true); paint.setColor(Color.RED); canvas.drawBitmap(bitmap,new Matrix(),paint); imageview.setImageBitmap(bitmap); } });
呃,這裡會把畫佈擦掉…也就是擦成白色…
最後看看頁面佈局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:id="@+id/ll_layout"> <!-- tools:context=".MyPaintToolsActivity">--> <ImageView android:id="@+id/imageview" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" /> <RadioGroup android:background="#747373" android:layout_width="match_parent" android:orientation="horizontal" android:id="@+id/rg_color" android:layout_height="wrap_content"> <RadioButton android:id="@+id/rb_red" android:layout_width="wrap_content" android:layout_height="43dp" android:layout_weight="1" android:text="紅色" android:textColor="#FF0000" android:textSize="18sp" /> <RadioButton android:id="@+id/rb_green" android:layout_width="wrap_content" android:layout_height="30dp" android:layout_weight="1" android:text="黑色" android:textColor="#000000" android:textSize="18sp" /> <RadioButton android:id="@+id/rb_blue" android:layout_width="wrap_content" android:layout_height="30dp" android:layout_weight="1" android:text="白色" android:textColor="#FFFFFF" android:textSize="18sp" /> </RadioGroup> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal"> <Button android:id="@+id/btn_clear" android:layout_width="wrap_content" android:layout_weight="1" android:layout_height="wrap_content" android:background="#000000" android:textColor="#FFFFFF" android:textSize="18sp" android:text="清除"/> <Button android:id="@+id/btn_eraser" android:layout_width="wrap_content" android:layout_weight="1" android:layout_height="wrap_content" android:textColor="#FFFFFF" android:textSize="18sp" android:background="#000000" android:text="擦除"/> </LinearLayout> </LinearLayout>
到此這篇關於Android studio實現畫板功能的文章就介紹到這瞭,更多相關Android studio畫板功能內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Android移動應用開發指南之六種佈局詳解
- Android studio六大基本佈局詳解
- Android studio實現簡易的計算器功能
- Android實現背景圖片輪播
- Android實現濾鏡效果ColorMatrix