package com.bestapp.yikuair.fragments; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import java.util.Random; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.Bitmap.CompressFormat; import android.graphics.drawable.Drawable; import android.net.Uri; import android.opengl.Visibility; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.provider.MediaStore; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.util.AttributeSet; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.Toast; import com.bestapp.yikuair.R; import com.bestapp.yikuair.customview.MyHorizontalScrollView; import com.bestapp.yikuair.customview.SketchView; import com.bestapp.yikuair.utils.BitmapCompressUtil; import com.bestapp.yikuair.utils.OnScrollListener; import com.bestapp.yikuair.utils.SketchViewBigSize; import com.bestapp.yikuair.utils.SketchViewColours; import com.bestapp.yikuair.utils.UserInfo; public class WhiteBoardActivity extends Activity implements OnClickListener, OnScrollListener { private ImageView imageview_background; private SketchView tuyaView; FrameLayout tuyaFrameLayout = null; private static final int UNDO_PATH = 1; private static final int REDO_PATH = 2; private static final int USE_ERASER = 3; private static final int USE_PAINT = 4; private static final int CLEAR_PATH = 5; private static final String TAG = "TuyaActivity"; private LinearLayout linearlayout = null; private ImageButton colorButton; private ImageButton pensizeButton; private ImageButton undoButton; private ImageButton redoButton; private ImageButton clearButton; private ImageButton sendButton; private ScrollView scrollviewcolour; private ScrollView scrollviewbig; private MyHorizontalScrollView hscrollViewcolour; private MyHorizontalScrollView hscrollViewsize; private List<SketchViewColours> colours = new ArrayList(); private SketchViewColours colour; private List<SketchViewBigSize> sizes = new ArrayList(); private SketchViewBigSize size; private int index; private int CANCEL_BACKGROUNDIMAGE = 0; LinearLayout whiteBoardTitle = null; public static WhiteBoardActivity instance = null; private ClientSocket client; private ImageButton backButton = null; private ImageButton backwardButton = null; private ImageButton forwardButton = null; private final int defaultColor = Color.parseColor("#C9DDFE"); private int CANCLE_BACKGROUND_IMAGE = 0; private String smallImgPath; private String bigImgPath; private final static int UUID_LENGTH = 15; public static final File FILE_SDCARD = Environment .getExternalStorageDirectory(); Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case UNDO_PATH: int undo = tuyaView.undo(); System.out.println("可以撤销:" + undo); if (undo < 0) { } break; case REDO_PATH: int redo = tuyaView.redo(); // 返回上次操作 System.out.println("可以前进:" + redo); if (redo < 1) { // 设置按钮不可用 } else break; case USE_ERASER: // TuyaView.color=Color.CYAN; if (linearlayout.getVisibility() == View.VISIBLE) { linearlayout.setVisibility(View.GONE); } SketchView.color = Color.parseColor("#C9DDFE"); SketchView.srokeWidth = 15; // Paint eraser = tuyaView.getPaint(); // eraser.setColor(Color.CYAN); break; case USE_PAINT: if (linearlayout.getVisibility() == View.GONE) { linearlayout.setVisibility(View.VISIBLE); /* * for(int i=0;i<sizes.size();i++){ * if(sizes.get(i).getButton().getBackground()== * getResources * ().getDrawable(R.drawable.brushsizeselectedbg)){ * TuyaView.srokeWidth = sizes.get(i).getName()+10; break; } * } */ SketchView.srokeWidth = sizes.get(index).getName() + 10; for (int i = 0; i < colours.size(); i++) { if (colours.get(i).getButtonbg().getVisibility() == View.VISIBLE) { SketchView.color = Color.parseColor("#" + colours.get(i).getName()); break; } } } else { linearlayout.setVisibility(View.GONE); } break; case CLEAR_PATH: int clear = tuyaView.clear(); if (clear < 0) { System.out.println("clear error"); } break; } } }; @Override public void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.white_board_layout); Log.i("FM", "WhiteBoard"); instance = this; tuyaFrameLayout = (FrameLayout) findViewById(R.id.tuya_layout); imageview_background = (ImageView) findViewById(R.id.imageview_background); tuyaView = (SketchView) findViewById(R.id.white_board_view); SketchView.color = Color.parseColor("#000000"); SketchView.srokeWidth = 15; backButton = (ImageButton) findViewById(R.id.white_board_back); colorButton = (ImageButton) findViewById(R.id.colourtag); pensizeButton = (ImageButton) findViewById(R.id.bigtag); undoButton = (ImageButton) findViewById(R.id.white_board_backward); redoButton = (ImageButton) findViewById(R.id.white_board_forward); clearButton = (ImageButton) findViewById(R.id.white_board_delete); sendButton = (ImageButton) findViewById(R.id.white_board_send); backButton.setOnClickListener(this); colorButton.setOnClickListener(this); pensizeButton.setOnClickListener(this); undoButton.setOnClickListener(this); redoButton.setOnClickListener(this); clearButton.setOnClickListener(this); sendButton.setOnClickListener(this); scrollviewcolour = (ScrollView) this .findViewById(R.id.scrollviewcolour); scrollviewbig = (ScrollView) this.findViewById(R.id.scrollviewbig); hscrollViewcolour = (MyHorizontalScrollView) this .findViewById(R.id.HorizontalScrollViewColour); hscrollViewcolour.setOnScrollListener(this); hscrollViewsize = (MyHorizontalScrollView) this .findViewById(R.id.whiteboard_sizebutton_scrollview); hscrollViewsize.setOnScrollListener(this); linearlayout = (LinearLayout) this.findViewById(R.id.ScrollView01); initColourButton(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub switch (requestCode) { case 10: if (resultCode == Activity.RESULT_CANCELED) return; if (data == null) return; Uri uri = data.getData(); if (uri == null) return; String[] proj = { MediaStore.Images.Media.DATA }; Cursor actualimagecursor = managedQuery(uri, proj, null, null, null); int actual_image_column_index = actualimagecursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); actualimagecursor.moveToFirst(); String img_path = actualimagecursor .getString(actual_image_column_index); File file = new File(img_path); if (file.exists()) { System.out.println("图片路径为:" + img_path); // 设置背景图 Bitmap bitmap = loadFromSdCard(img_path); imageview_background.setBackgroundColor(defaultColor); imageview_background.setImageBitmap(bitmap); } break; } super.onActivityResult(requestCode, resultCode, data); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // if (keyCode == KeyEvent.KEYCODE_BACK) {// 返回键 // this.finish(); // int undo = tuyaView.undo(); //撤销上次操作 // if(undo<1){ // System.out.println("设置imageview为默认"); // imageview_background.setBackgroundColor(0xff99CCCC); // imageview_background.setImageBitmap(null); // } // return true; // } if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { if (linearlayout.getVisibility() == View.VISIBLE) { linearlayout.setVisibility(View.GONE); return true; } } return super.onKeyDown(keyCode, event); } @Override public void onClick(View v) { // TODO Auto-generated method stub Log.e("FM", "WhiteBoardActivity onClick" + v.getId()); switch (v.getId()) { case R.id.white_board_back: Log.e("yikuair", "white board activity back"); WhiteBoardActivity.this.finish(); break; /* * undo the draw action */ case R.id.white_board_backward: Message undo_message = new Message(); undo_message.what = UNDO_PATH; handler.sendMessage(undo_message); break; /* * redo the draw action */ case R.id.white_board_forward: Message redo_message = new Message(); redo_message.what = REDO_PATH; handler.sendMessage(redo_message); break; case R.id.white_board_delete: Message clear_message = new Message(); clear_message.what = CLEAR_PATH; handler.sendMessage(clear_message); break; /* * eraser */ case R.id.white_baord_transparency: Message eraser_message = new Message(); eraser_message.what = USE_ERASER; handler.sendMessage(eraser_message); break; /* * waiting to confirm */ // case R.id.button_pen: // Message pen_message = new Message(); // pen_message.what = USE_PAINT; // handler.sendMessage(pen_message); // break; case R.id.colourtag: Log.i("FM", "colourtag pressed"); if (linearlayout.getVisibility() == View.GONE) { linearlayout.setVisibility(View.VISIBLE); scrollviewcolour.setVisibility(View.VISIBLE); scrollviewbig.setVisibility(View.GONE); } else { linearlayout.setVisibility(View.GONE); } break; case R.id.bigtag: Log.i("FM", "bigtag pressed"); if (linearlayout.getVisibility() == View.GONE) { linearlayout.setVisibility(View.VISIBLE); scrollviewcolour.setVisibility(View.GONE); scrollviewbig.setVisibility(View.VISIBLE); } else { linearlayout.setVisibility(View.GONE); } break; case R.id.white_board_send: sendTuyaBitmap(); // Log.e("yikuair", "imagePath:" + imagePath); Intent intent = new Intent(); intent.putExtra("smallImgPath", smallImgPath); intent.putExtra("bigImgPath", bigImgPath); setResult(RESULT_OK, intent); finish(); break; default: break; } // 颜色 int j = -1; for (int i = 0; i < colours.size(); i++) { if (v.getId() == colours.get(i).getTag()) { j = i; } } if (j != -1) { for (int i = 0; i < colours.size(); i++) { colours.get(i).getButtonbg().setVisibility(View.INVISIBLE); } colours.get(j).getButtonbg().setVisibility(View.VISIBLE); // 改变颜色 colours.get(j).getName(); Log.i(TAG, "" + colours.get(j).getName()); SketchView.color = Color.parseColor("#" + colours.get(j).getName()); return; } // 大小 for (int i = 0; i < sizes.size(); i++) { if (v.getId() == sizes.get(i).getTag()) { j = i; } } if (j != -1) { for (int i = 0; i < sizes.size(); i++) { sizes.get(i).getButton().setBackgroundResource(0); } sizes.get(j).getButton() .setBackgroundResource(R.drawable.tuya_brushsizeselectedbg); // 改变大小 sizes.get(j).getName(); Log.i(TAG, "" + sizes.get(j).getName()); SketchView.srokeWidth = sizes.get(j).getName() + 10; index = j; return; } } /** * 发送图片 */ private void sendTuyaBitmap() { // 发送按钮 boolean drawingCacheEnabled = tuyaFrameLayout.isDrawingCacheEnabled(); if (!drawingCacheEnabled) { tuyaFrameLayout.setDrawingCacheEnabled(true); tuyaFrameLayout.buildDrawingCache(); } // 获得当前的Bitmap对象 Bitmap bitmap = tuyaFrameLayout.getDrawingCache(); if (bitmap != null) { // 读取SD卡状态 boolean sdCardIsMounted = android.os.Environment .getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED); if (!sdCardIsMounted) { Toast.makeText(this, getString(R.string.sdcard_error), 1000) .show(); return; } else { // 保存到SD卡 smallImgPath = saveToLocal(BitmapCompressUtil .getResizeImage(bitmap)); bigImgPath = saveToLocal(BitmapCompressUtil .compressImage(bitmap)); /* * File dirFile = new File( * Environment.getExternalStorageDirectory() + "yikuair/"); if * (!dirFile.exists()) dirFile.mkdirs(); String filepath = * Environment.getExternalStorageDirectory() + * Long.toString(System.currentTimeMillis()) + ".jpg"; try { * FileOutputStream fos = new FileOutputStream(new File( * filepath)); bitmap.compress(CompressFormat.JPEG, 100, fos); * fos.flush(); fos.close(); Toast.makeText(this, "保存成功!", * 1000).show(); // 跳转到对应界面 * * } catch (FileNotFoundException e) { e.printStackTrace(); } * catch (IOException e) { e.printStackTrace(); } return; */} } else { Toast.makeText(this, "未能发送图片,请重试!", 1000).show(); } } private Bitmap loadFromSdCard(String filePath) { File file = new File(filePath); Bitmap bmp = null; try { FileInputStream fis = new FileInputStream(file); bmp = BitmapFactory.decodeStream(fis); if (bmp != null) { return bmp; } } catch (FileNotFoundException e) { e.printStackTrace(); } return null; } public String saveToLocal(Bitmap bm) { // String picPath = FILE_LOCAL + getNextString() + "photo.jpg"; String picPath = FILE_SDCARD.toString() + File.separator + "yikuair" + File.separator + Long.toString(System.currentTimeMillis())+ "photo.jpg"; File picFileDir = new File(FILE_SDCARD.toString() + File.separator + "yikuair"); if (!picFileDir.exists()) { picFileDir.mkdir(); } try { FileOutputStream fos = new FileOutputStream(picPath); bm.compress(CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); return null; } catch (IOException e) { e.printStackTrace(); return null; } return picPath; } public static String getNextString() { SimpleDateFormat sDateFormat = new SimpleDateFormat("hh:mm:ss"); String date = sDateFormat.format(new java.util.Date()); Random random = new Random(); char[] chars = (UserInfo.mac_address + date).replace(":", "-") .toCharArray(); char[] data = new char[UUID_LENGTH]; for (int i = 0; i < UUID_LENGTH; i++) { int index = random.nextInt(chars.length); data[i] = chars[index]; } String s = new String(data); return s; } @Override public void onLeft() { // TODO Auto-generated method stub } @Override public void onRight() { // TODO Auto-generated method stub } @Override public void onScroll() { // TODO Auto-generated method stub } private void initColourButton() { // TODO Auto-generated method stub colour = new SketchViewColours(); colour.setButton((Button) this.findViewById(R.id.button01)); colour.setButtonbg((ImageView) this.findViewById(R.id.imageview01)); colour.setName("140c09"); colour.setTag(R.id.button01); colours.add(colour); colour = new SketchViewColours(); colour.setButton((Button) this.findViewById(R.id.button02)); colour.setButtonbg((ImageView) this.findViewById(R.id.imageview02)); colour.setName("fe0000"); colour.setTag(R.id.button02); colours.add(colour); colour = new SketchViewColours(); colour.setButton((Button) this.findViewById(R.id.button03)); colour.setButtonbg((ImageView) this.findViewById(R.id.imageview03)); colour.setName("ff00ea"); colour.setTag(R.id.button03); colours.add(colour); colour = new SketchViewColours(); colour.setButton((Button) this.findViewById(R.id.button04)); colour.setButtonbg((ImageView) this.findViewById(R.id.imageview04)); colour.setName("011eff"); colour.setTag(R.id.button04); colours.add(colour); colour = new SketchViewColours(); colour.setButton((Button) this.findViewById(R.id.button05)); colour.setButtonbg((ImageView) this.findViewById(R.id.imageview05)); colour.setName("00ccff"); colour.setTag(R.id.button05); colours.add(colour); colour = new SketchViewColours(); colour.setButton((Button) this.findViewById(R.id.button06)); colour.setButtonbg((ImageView) this.findViewById(R.id.imageview06)); colour.setName("00641c"); colour.setTag(R.id.button06); colours.add(colour); colour = new SketchViewColours(); colour.setButton((Button) this.findViewById(R.id.button07)); colour.setButtonbg((ImageView) this.findViewById(R.id.imageview07)); colour.setName("9bff69"); colour.setTag(R.id.button07); colours.add(colour); colour = new SketchViewColours(); colour.setButton((Button) this.findViewById(R.id.button08)); colour.setButtonbg((ImageView) this.findViewById(R.id.imageview08)); colour.setName("f0ff00"); colour.setTag(R.id.button08); colours.add(colour); colour = new SketchViewColours(); colour.setButton((Button) this.findViewById(R.id.button09)); colour.setButtonbg((ImageView) this.findViewById(R.id.imageview09)); colour.setName("ff9c00"); colour.setTag(R.id.button09); colours.add(colour); colour = new SketchViewColours(); colour.setButton((Button) this.findViewById(R.id.button10)); colour.setButtonbg((ImageView) this.findViewById(R.id.imageview10)); colour.setName("ff5090"); colour.setTag(R.id.button10); colours.add(colour); colour = new SketchViewColours(); colour.setButton((Button) this.findViewById(R.id.button11)); colour.setButtonbg((ImageView) this.findViewById(R.id.imageview11)); colour.setName("9e9e9e"); colour.setTag(R.id.button11); colours.add(colour); colour = new SketchViewColours(); colour.setButton((Button) this.findViewById(R.id.button12)); colour.setButtonbg((ImageView) this.findViewById(R.id.imageview12)); colour.setName("f5f5f5"); colour.setTag(R.id.button12); colours.add(colour); for (int i = 0; i < colours.size(); i++) { colours.get(i).getButton().setOnClickListener(this); colours.get(i).getButtonbg().setVisibility(View.INVISIBLE); } colours.get(1).getButtonbg().setVisibility(View.VISIBLE); size = new SketchViewBigSize(); size.setButton((Button) this.findViewById(R.id.sizebutton01)); size.setName(15); size.setTag(R.id.sizebutton01); sizes.add(size); size = new SketchViewBigSize(); size.setButton((Button) this.findViewById(R.id.sizebutton02)); size.setName(10); size.setTag(R.id.sizebutton02); sizes.add(size); size = new SketchViewBigSize(); size.setButton((Button) this.findViewById(R.id.sizebutton03)); size.setName(5); size.setTag(R.id.sizebutton03); sizes.add(size); size = new SketchViewBigSize(); size.setButton((Button) this.findViewById(R.id.sizebutton04)); size.setName(0); size.setTag(R.id.sizebutton04); sizes.add(size); size = new SketchViewBigSize(); size.setButton((Button) this.findViewById(R.id.sizebutton05)); size.setName(-5); size.setTag(R.id.sizebutton05); sizes.add(size); size = new SketchViewBigSize(); size.setButton((Button) this.findViewById(R.id.sizebutton06)); size.setName(-10); size.setTag(R.id.sizebutton06); sizes.add(size); for (int i = 0; i < sizes.size(); i++) { sizes.get(i).getButton().setOnClickListener(this); sizes.get(i).getButton().setBackgroundResource(0); } sizes.get(2).getButton() .setBackgroundResource(R.drawable.tuya_brushsizeselectedbg); index = 2; } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); tuyaView = null; } }