生活随笔
收集整理的這篇文章主要介紹了
Android SurfaceView实现静态于动态画图效果
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文是基于Android的SurfaceView的動態畫圖效果,實現靜態和動態下的正弦波畫圖,可作為自己做圖的簡單參考,廢話不多說,先上圖,
靜態效果:
動態效果:
?
比較簡單,代碼注釋的也比較詳細,易懂,我就直接上代碼了吧:
1.main.xml
<?xml?version="1.0"?encoding="utf-8"?>??<LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??????android:layout_width="fill_parent"??????android:layout_height="fill_parent"??????android:orientation="vertical"?>??<SurfaceView???????android:layout_width="fill_parent"??????android:layout_height="600px"??????android:id="@+id/surfaceview_draw"/>??<RelativeLayout?android:layout_width="fill_parent"??????android:layout_height="wrap_content">??<Button?android:layout_below="@id/surfaceview_draw"??????android:layout_marginLeft="7dip"??????android:id="@+id/simpledraw_btn"??????android:text="簡單繪圖"??????android:layout_width="wrap_content"??????android:layout_height="wrap_content"??????android:textSize="20dip"/>????<Button??????android:id="@+id/timerdraw_btn"??????android:layout_width="wrap_content"??????android:layout_height="wrap_content"??????android:layout_toRightOf="@id/simpledraw_btn"??????android:text="定時繪圖"???????android:textSize="20dip"/>??<Button???????android:id="@+id/cleardraw_btn"??????android:layout_width="wrap_content"??????android:layout_height="wrap_content"??????android:layout_toRightOf="@id/timerdraw_btn"??????android:text="清除圖像"??????android:textSize="20dip"/>??</RelativeLayout>??</LinearLayout>??2.SurfaceViewDrawActivity.java
package?com.huangcheng.draw;????import?java.util.Timer;??import?java.util.TimerTask;????import?android.app.Activity;??import?android.graphics.Canvas;??import?android.graphics.Color;??import?android.graphics.Paint;??import?android.graphics.Rect;??import?android.os.Bundle;??import?android.util.Log;??import?android.view.SurfaceHolder;??import?android.view.SurfaceView;??import?android.view.View;??import?android.view.View.OnClickListener;??import?android.widget.Button;????public?class?SurfaceViewDrawActivity?extends?Activity?{??????????private?SurfaceView?surface_draw;??????private?SurfaceHolder?surfaceholder;????????private?Button?simpledraw_btn;??????private?Button?timerdraw_btn;??????private?Button?cleardraw_btn;????????private?Timer?timer;??????private?TimerTask?timertask;????????private?int[]?Y;????private?int?centerY,?oldX,?oldY,?currentX;??????private?volatile?int?signal=0;??????@Override??????public?void?onCreate(Bundle?savedInstanceState)?{??????????super.onCreate(savedInstanceState);??????????setContentView(R.layout.main);??????????surface_draw?=?(SurfaceView)?findViewById(R.id.surfaceview_draw);??????????surfaceholder?=?surface_draw.getHolder();????????????simpledraw_btn?=?(Button)?findViewById(R.id.simpledraw_btn);??????????timerdraw_btn?=?(Button)?findViewById(R.id.timerdraw_btn);??????????cleardraw_btn?=?(Button)?findViewById(R.id.cleardraw_btn);??????????cleardraw_btn.setEnabled(false);????????????centerY?=?300;??????????Y?=?new?int[getWindowManager().getDefaultDisplay().getWidth()];??????????for?(int?i?=?1;?i?<?Y.length?+?1;?i++)?{??????????????Y[i?-?1]?=?centerY?+?(int)?(100?*?Math.sin(i?*?2?*?Math.PI?/?180));??????????????????????}??????????simpledraw_btn.setOnClickListener(new?OnClickListener()?{????????????????@Override??????????????public?void?onClick(View?arg0)?{??????????????????????????????????simpledraw();????????????????signal=1;??????????????????simpledraw_btn.setEnabled(false);??????????????????timerdraw_btn.setEnabled(false);??????????????????cleardraw_btn.setEnabled(true);??????????????}??????????});??????????timerdraw_btn.setOnClickListener(new?OnClickListener()?{????????????????@Override??????????????public?void?onClick(View?arg0)?{??????????????????????????????????oldX=0;??????????????????oldY=centerY;??????????????????currentX=0;??????????????????timer=new?Timer();??????????????????timertask=new?TimerTask()?{????????????????????????????????????????????@Override??????????????????????public?void?run()?{??????????????????????????????????????????????????currentX++;??????????????????????????complexdraw(currentX);??????????????????????????if(currentX==Y.length-1){??????????????????????????????ClearDraw();??????????????????????????????currentX?=?0;??????????????????????????????oldX=0;??????????????????????????????oldY=centerY;??????????????????????????}??????????????????????}??????????????????};??????????????????timer.schedule(timertask,?0,?5);????????????????signal=2;??????????????????simpledraw_btn.setEnabled(false);??????????????????timerdraw_btn.setEnabled(false);??????????????????cleardraw_btn.setEnabled(true);??????????????}??????????});??????????cleardraw_btn.setOnClickListener(new?OnClickListener()?{????????????????????????????@Override??????????????public?void?onClick(View?arg0)?{??????????????????????????????????if(signal==1){??????????????????????ClearDraw();??????????????????????simpledraw_btn.setEnabled(true);??????????????????????timerdraw_btn.setEnabled(true);??????????????????}??????????????????if(signal==2){??????????????????????timertask.cancel();??????????????????????timer.cancel();??????????????????????ClearDraw();??????????????????????simpledraw_btn.setEnabled(true);??????????????????????timerdraw_btn.setEnabled(true);??????????????????}??????????????}??????????});??????}??????????void?simpledraw()?{??????????oldX?=?0;??????????oldY?=?centerY;??????????Canvas?canvas?=?surfaceholder??????????????????.lockCanvas(new?Rect(oldX,?0,?oldX?+?Y.length,??????????????????????????getWindowManager().getDefaultDisplay().getHeight()));????????Log.i("Canvas:X:",??????????????????String.valueOf(oldX)?+?","?+?String.valueOf(oldX?+?Y.length));????????????Paint?mPaint?=?new?Paint();??????????mPaint.setColor(Color.GREEN);????????mPaint.setStrokeWidth(2);??????????int?y;????????????for?(int?i?=?oldX?+?1;?i?<?Y.length;?i++)?{????????????y?=?Y[i?-?1];??????????????canvas.drawLine(oldX,?oldY,?i,?y,?mPaint);??????????????????????????oldX?=?i;??????????????oldY?=?y;??????????}??????????surfaceholder.unlockCanvasAndPost(canvas);??????}????????????void?ClearDraw()?{??????????Canvas?canvas?=?surfaceholder.lockCanvas(null);??????????canvas.drawColor(Color.BLACK);????????surfaceholder.unlockCanvasAndPost(canvas);??????}??????????void?complexdraw(int?current){??????????Canvas?canvas?=?surfaceholder??????????????????.lockCanvas(new?Rect(oldX,?0,?current,??????????????????????????getWindowManager().getDefaultDisplay().getHeight()));????????Log.i("Canvas:X:",??????????????????String.valueOf(oldX)?+?","?+?String.valueOf(oldX?+?Y.length));????????????Paint?mPaint?=?new?Paint();??????????mPaint.setColor(Color.GREEN);????????mPaint.setStrokeWidth(2);??????????????????int?y=Y[current-1];??????????canvas.drawLine(oldX,?oldY,?current,?y,?mPaint);??????????????????oldX?=?current;??????????oldY?=?y;??????????surfaceholder.unlockCanvasAndPost(canvas);??????}??} ?
轉載于:https://www.cnblogs.com/Free-Thinker/p/4750030.html
總結
以上是生活随笔為你收集整理的Android SurfaceView实现静态于动态画图效果的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。