日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java - 有大神能幫忙補充下代碼嗎(Android的Canvas和Paint的使用,和文件保存,手勢識別)?

瀏覽:263日期:2024-02-22 17:03:43

問題描述

研究了好久 都寫不好 。。。

package com.li.zhuoyuan.designmodel;import android.content.Context;import android.os.Build;import android.util.Log;import android.view.MotionEvent;import android.view.ScaleGestureDetector;public abstract class GestureDetector { private static final String TAG = 'VersionedGestureDetector'; OnGestureListener mListener; public static GestureDetector newInstance(Context context, OnGestureListener listener) {final int sdkVersion = Integer.parseInt(Build.VERSION.SDK);GestureDetector detector = null;if (sdkVersion < Build.VERSION_CODES.ECLAIR) { detector = new CupcakeDetector();} else if (sdkVersion < Build.VERSION_CODES.FROYO) { detector = new EclairDetector();} else { detector = new FroyoDetector(context);}Log.d(TAG, 'Created new ' + detector.getClass());detector.mListener = listener;return detector; } public abstract boolean onTouchEvent(MotionEvent ev); public interface OnGestureListener {public void onDrag(float dx, float dy);public void onScale(float scaleFactor); } private static class CupcakeDetector extends GestureDetector {float mLastTouchX;float mLastTouchY;float getActiveX(MotionEvent ev) { return ev.getX();}float getActiveY(MotionEvent ev) { return ev.getY();}boolean shouldDrag() { return true;}@Overridepublic boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) {case MotionEvent.ACTION_DOWN: { mLastTouchX = getActiveX(ev); mLastTouchY = getActiveY(ev); break;}case MotionEvent.ACTION_MOVE: { final float x = getActiveX(ev); final float y = getActiveY(ev); if (shouldDrag()) {mListener.onDrag(x - mLastTouchX, y - mLastTouchY); } mLastTouchX = x; mLastTouchY = y; break;} } return true;} } private static class EclairDetector extends CupcakeDetector {private static final int INVALID_POINTER_ID = -1;private int mActivePointerId = INVALID_POINTER_ID;private int mActivePointerIndex = 0;@Overridefloat getActiveX(MotionEvent ev) { return ev.getX(mActivePointerIndex);}@Overridefloat getActiveY(MotionEvent ev) { return ev.getY(mActivePointerIndex);}@Overridepublic boolean onTouchEvent(MotionEvent ev) { final int action = ev.getAction(); //No.1 //開始寫代碼,請結合所有代碼在這里實現,計算手指在屏幕上移動的位置。從而方便其他調用這個類的地方更新屏幕上小機器人的位置。小機器人跟隨手指移動。 switch (action & MotionEvent.ACTION_MASK) {case MotionEvent.ACTION_DOWN: mLastTouchX = ev.getX(); mLastTouchY = ev.getY(); break;case MotionEvent.ACTION_MOVE: mLastTouchX = ev.getX(); mLastTouchY = ev.getY(); } mActivePointerIndex = 0; //end_code return super.onTouchEvent(ev);} } private static class FroyoDetector extends EclairDetector {private ScaleGestureDetector mDetector;public FroyoDetector(Context context) { mDetector = new ScaleGestureDetector(context, new ScaleGestureDetector.SimpleOnScaleGestureListener() {@Overridepublic boolean onScale(ScaleGestureDetector detector) { mListener.onScale(detector.getScaleFactor()); return true;} });}@Overrideboolean shouldDrag() { return !mDetector.isInProgress();}@Overridepublic boolean onTouchEvent(MotionEvent ev) { mDetector.onTouchEvent(ev); return super.onTouchEvent(ev);} }}

package com.li.zhuoyuan.designmodel;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.MotionEvent;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.Toast;import java.io.File;public class MainActivity extends AppCompatActivity { private Button button_save, button_resume; private ImageView iv_canvas; private Bitmap baseBitmap; private Canvas canvas; /*聲明畫筆*/ private Paint mPaint; /*手勢監聽器*/ private View.OnTouchListener onTouchListener = new View.OnTouchListener() {/*表示手指在屏幕上X軸Y軸的坐標點*/float startX;float startY;@Overridepublic boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) {case MotionEvent.ACTION_DOWN: //No.1 //開始寫代碼,請用代碼實現初始化Bitmap對象、定義畫布顏色(請定義為白色)、記錄用戶手指在屏幕上的觸摸點坐標 將坐標存入到startX和startY變量中。 Bitmap bitmap = Bitmap.createBitmap(iv_canvas.getWidth(), iv_canvas.getHeight(), Bitmap.Config.ARGB_8888); mPaint.setColor(Color.WHITE); startX = iv_canvas.getX(); startX = iv_canvas.getY(); //end_code break;case MotionEvent.ACTION_MOVE: //No.2 //開始寫代碼,根據手指在屏幕滑動的軌跡實現繪制軌跡的線條,并更新手指在屏幕上的坐標點(startX和startY變量),將繪制好的圖像展示在ImageView中。 float stopX = iv_canvas.getX(); float stopY = iv_canvas.getY(); //end_code break;case MotionEvent.ACTION_UP: break;default: break; } return true;} }; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/*初始化畫筆 設置畫筆的寬度和顏色*/mPaint = new Paint();mPaint.setStrokeWidth(5);mPaint.setColor(Color.RED);iv_canvas = (ImageView) findViewById(R.id.iv_canvas);button_save = (Button) findViewById(R.id.button_save);button_resume = (Button) findViewById(R.id.button_resume);/*保存按鈕的監聽器*/button_save.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) {saveBitmap(); }});/*清除按鈕的監聽器*/button_resume.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) {resumeCanvas(); }});iv_canvas.setOnTouchListener(onTouchListener); } /*保存圖片的方法*/ protected void saveBitmap() {try { /*以png的格式保存的手機內存中*/ //No.3 //開始寫代碼,請在這里實現文件存儲的方法,將手指在屏幕上涂鴉的圖形以PNG圖片的形式保存到SD卡中;并發送廣播進行掃描SD卡。 File file //end_code} catch (Exception e) { Toast.makeText(MainActivity.this, '保存圖片失敗', 0).show(); e.printStackTrace();} } /*清除畫布的方法*/ protected void resumeCanvas() {if (baseBitmap != null) { baseBitmap = Bitmap.createBitmap(iv_canvas.getWidth(), iv_canvas.getHeight(), Bitmap.Config.ARGB_8888); canvas = new Canvas(baseBitmap); canvas.drawColor(Color.WHITE); iv_canvas.setImageBitmap(baseBitmap); Toast.makeText(MainActivity.this, '清除畫板成功,可以重新開始繪圖', 0).show();} }}

請輸入代碼

問題解答

回答1:

直接說要做個什么功能比較好,這樣估計沒人回去幫你填代碼

回答2:

能把你的工資分我一份嗎?

標簽: java
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久这里只有精品一区二区| 香蕉成人久久| 午夜精品福利影院| 精品日韩一区| 日韩久久一区二区三区| 日韩欧美另类中文字幕| 亚洲高清激情| 日韩超碰人人爽人人做人人添| 激情久久中文字幕| 丝袜美腿亚洲一区二区图片| 日韩综合一区二区| 日韩午夜av在线| 日韩大片在线播放| 久久xxxx| 激情欧美一区| 欧美日韩一区自拍| 亚洲狼人精品一区二区三区| 久久久国产精品入口麻豆| 丝袜美腿一区| 国产欧美日韩免费观看| 亚洲小说春色综合另类电影| 伊人久久婷婷| 大香伊人久久精品一区二区 | 国产精品调教| 三上悠亚国产精品一区二区三区| 国产精一区二区| 日韩欧美2区| 日本在线不卡视频一二三区| 蜜桃av一区二区| 中文久久精品| 美女久久精品| 国产精品久久久久久久久免费高清 | 国产另类在线| 少妇精品久久久一区二区| 一区二区视频欧美| 激情欧美国产欧美| japanese国产精品| 久久中文字幕av一区二区不卡| 国产欧美三级| 日韩毛片一区| 免费久久精品| 亚洲欧美日韩国产综合精品二区| 色爱综合网欧美| 精品国产亚洲一区二区三区在线 | 亚洲小说欧美另类婷婷| 欧美激情五月| 精品一区二区三区四区五区| 日本一区福利在线| 成人小电影网站| 日韩欧美2区| 国产三级精品三级在线观看国产| 一级欧洲+日本+国产| 五月天激情综合网| 国产日产高清欧美一区二区三区 | 欧美 日韩 国产精品免费观看| 日韩大片免费观看| 精品捆绑调教一区二区三区| 香蕉视频亚洲一级| 久久国产精品久久久久久电车| 久久久水蜜桃av免费网站| 你懂的国产精品永久在线| 欧美xxxx性| 国产精品99视频| 国产精品巨作av| 精品国产中文字幕第一页| 国产欧美高清| 日韩毛片视频| 亚洲涩涩在线| 激情六月综合| 日韩不卡一区| 成人在线视频中文字幕| 日韩av中文字幕一区| 欧美日韩一区二区三区四区在线观看 | 亚洲精品美女| 国产高清精品二区| 国产精品三p一区二区| 午夜一级久久| 日韩av一区二区三区四区| 婷婷亚洲精品| 成人午夜网址| 国产日韩亚洲| 精品欧美久久| 亚洲免费专区| 欧美日韩一区二区三区在线电影| 国产成年精品| 国产一区日韩一区| 在线手机中文字幕| 国产伦精品一区二区三区千人斩| 国产精品一区高清| 日韩国产在线一| 久久中文字幕一区二区三区| 99国产精品私拍| 成人日韩在线观看| 亚洲我射av| 国产调教精品| 欧美国产美女| 婷婷综合社区| 美女免费视频一区| 国产韩日影视精品| 日韩一区二区三免费高清在线观看| 日韩精品a在线观看91| 欧美a级一区二区| 伊人影院久久| 久久狠狠久久| 日韩av片子| 亚洲久久在线| 久久精品超碰| 精品女同一区二区三区在线观看| 伊人久久亚洲影院| 一级欧美视频| 伊人久久视频| 亚洲专区视频| 国产精品一区二区三区www| 日韩免费视频| 国产精品婷婷| 国产一区二区三区四区五区 | 六月丁香综合| 欧美日韩亚洲一区在线观看| 韩国精品主播一区二区在线观看 | 欧美日韩视频| 日韩一区二区在线免费| 欧洲在线一区| 99久久久久国产精品| 在线视频亚洲| 偷拍亚洲精品| 亚洲二区在线| 亚洲午夜电影| 丝瓜av网站精品一区二区| 成人欧美一区二区三区的电影| 激情婷婷亚洲| 国产精品视频一区二区三区综合 | 中文字幕在线看片| 六月丁香综合在线视频| 97视频热人人精品免费| 激情欧美日韩一区| 四虎成人av| 三级欧美在线一区| 精品精品99| www在线观看黄色| 欧美日本一区| 欧美天堂亚洲电影院在线观看| 精品欧美一区二区三区在线观看| 亚洲激精日韩激精欧美精品| 在线精品福利| 久久精品影视| 日本中文字幕不卡| 99国产精品| 精品久久精品| 视频精品一区二区| 精品久久精品| 在线视频亚洲欧美中文| 黄色网一区二区| 久久一二三区| 亚洲精品四区| 欧美日韩99| 国产999精品在线观看| 尤物在线精品| 视频在线不卡免费观看| 亚洲一区二区免费看| 精品国产一区二区三区噜噜噜| 国产精品一线天粉嫩av| 欧美日韩四区| 丝袜美腿成人在线| 久久精品欧美一区| 午夜久久av | 国产精品chinese| 在线看片不卡| 四虎成人av| 日本成人在线一区| 久久精品国内一区二区三区| 噜噜噜躁狠狠躁狠狠精品视频| 婷婷视频一区二区三区| 久久久91麻豆精品国产一区| 亚洲免费影院| 国产精品丝袜在线播放| 羞羞答答国产精品www一本| 欧美日韩精品免费观看视完整| 999国产精品视频| 国产精品一区二区三区av| 精品资源在线| 欧美久久亚洲| 激情久久婷婷| 久久午夜视频| 日韩在线视频精品| 国产精品videossex久久发布 | 精品免费在线| 亚洲欧洲日韩| 欧美日韩国产高清| 日韩在线中文| 国内一区二区三区| 日韩国产一区二区三区| 国产精品久久久亚洲一区| 亚洲欧美网站在线观看| 日韩有码av| 在线视频精品| 国产精品片aa在线观看| 婷婷五月色综合香五月| 99成人在线| 久久精品天堂| 国产日韩在线观看视频|