Documente Academic
Documente Profesional
Documente Cultură
1. What is S Pen? 2. How to use the S Pen SDK? 2.1 Overview 2.2 CanvasView and SettingView 2.3 SCanvasView 2.4 Animation 3. Conclusion
01
WHAT IS S PEN?
1 WHAT IS S PEN?
1 WHAT IS S PEN?
2
3 4
1 WHAT IS S PEN?
S PEN COMPONENTS
PEN TIP
SIDE BUTTON
1 WHAT IS S PEN?
USING S PEN SDK COMPONENTS YOU CAN DEVELOP BRAND NEW APPLICATION
02
CONTENTS OF SDK
libspen.jar
Dev Guide
Sample Application
libspen.jar
.. @Override public void onTouchEvent (MotionEvent event) { .. String osVer = Build.VERSION.RELEASE; boolean eraserOn = false; boolean penActiveOn = false; boolean fingerActiveOn = false; int metaEraserOn = 0; int metaPenActiveOn = 0; ..
3 if (osVer.startsWith("2.3")) {
metaEraserOn = 0x4000000 0x400; if((event.getMetaState() & metaEraserOn) != 0) { eraserOn = true; } 0x2000000 metaPenActiveOn = 0x200; if((event.getMetaState() & metaPenActiveOn) != 0) { penActiveOn = true; }
..
if (osVer.startsWith("4")) {
if((event.getToolType(0) == MotionEvent.TOOL_TYPE_ERASER) { eraserOn = true; } if(event.getToolType(0) == MotionEvent.TOOL_TYPE_STYLUS) { penActiveOn = true; } if(event.getToolType(0) == MotionEvent.TOOL_TYPE_FINGER) { fingerActiveOn = true; } } ..
PACKAGES TO IMPORT
Import com.samsung.sdraw.* Import com.samsung.spensdk.* packages to use S Pen features
import android.app.Activity; import android.os.Bundle; import import import import import com.samsung.sdraw.CanvasView; com.samsung.sdraw.SDrawLibrary; com.samsung.sdraw.SettingView; com.samsung.sdraw.AbstractSettingView; com.samsung.sdraw.AbstractSettingView.SettingChangeListener;
import com.samsung.spensdk.SCanvasView; import com.samsung.spensdk.SCanvasView.OnPlayCompleteListener; import com.samsung.spensdk.SCanvasView.OnPlayProgressChangeListener; public class SampleActivity extends Activity {
Copyright 1995-2012 SAMSUNG All rights reserved
.. <FrameLayout android:id="@+id/canvas_container" android:layout_width="wrap_content" android:layout_height="wrap_content"> <com.samsung.sdraw.CanvasView android:id="@+id/canvas_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/my_bg_picture" /> <com.samsung.sdraw.SettingView android:id="@+id/setting_view" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </FrameLayout> ..
CANVASVIEW AND Register the SettingView and SETTINGVIEW CanvasView that was identified
by the attribute from the XML
public class SampleActivity extends Activity { .. private CanvasView mCanvasView; private SettingView mSettingView; .. @Override public void onCreate ( Bundle savedInstanceState ) { .. mCanvasView = (CanvasView) findViewById(R.id.canvas_view); mSettingView = (SettingView) findViewById(R.id.setting_view); mCanvasView.setSettingView(mSettingView); ..
public class SampleActivity extends Activity { .. @Override public void onCreate ( Bundle savedInstanceState ) { .. mCanvasView.setSettingView(mSettingView); ..
.. <Button android:id="@+id/settingBtn" android:layout_width=" match_parent " android:layout_height="wrap_content" android:text="Erase" android:layout_weight="1" /> <Button android:id="@+id/eraserBtn" android:layout_width=" match_parent " android:layout_height="wrap_content" android:text="Pen" android:layout_weight="1" /> ..
Simple OnBtnClick
public class SampleActivity extends Activity { .. @Override public void onCreate ( Bundle savedInstanceState ) { .. mSettingBtn = (Button) findViewById(R.id.settingBtn); mEraserBtn = (Button) findViewById(R.id.eraserBtn);
public class SampleActivity extends Activity { .. OnClickListener mBtnClickListener = new OnClickListener(){ @Override public void onClick ( View v ) { if(v.getId() == mSettingBtn.getId()) penBtnClick(); else if(v.getId() == mEraserBtn.getId()) eraserClick(); ..
private void penBtnClick ( View v ) { mCanvasView.changeModeTo (CanvasView.PEN_MODE); if(mSettingBtn.isSelected()) { if(mSettingView.isShown (AbstractSettingView.PEN_SETTING_VIEW)) mSettingView.closeView(); else mSettingView.showView(AbstractSettingView.PEN_SETTING_VIEW); } else { mSettingBtn.setSelected(true); mEraserBtn.setSelected(false); if(mSettingView.isShown(AbstractSettingView.ERASER_SETTING_VIEW)) mSettingView.closeView(); } } ..
Copyright 1995-2012 SAMSUNG All rights reserved
public class SampleActivity extends Activity { .. @Override public void onCreate ( Bundle savedInstanceState ) { .. mSettingView.setOnSettingChangeListener ( settingChangeListener ); ..
public class SampleActivity extends Activity { .. @Override private AbstractSettingView.SettingChangeListener settingChangeListener = new SettingChangeListener() { .. @Override public void onColorChanged ( int rgb ) {.. } @Override public void onClearAll ( ) {.. } @Override public void onEraserWidthChanged ( int width ) { .. } @Override public void onPenAlphaChanged ( int alpha ) { .. } @Override public void onPenWidthChanged ( int width ) { .. } ..
Copyright 1995-2012 SAMSUNG All rights reserved
.. <Button android:id="@+id/undoBtn" android:layout_width=" match_parent " android:layout_height="wrap_content" android:text="Undo" android:layout_weight="1" /> <Button android:id="@+id/redoBtn" android:layout_width=" match_parent " android:layout_height="wrap_content" android:text="Redo" android:layout_weight="1" /> ..
Simple OnBtnClick
public class SampleActivity extends Activity { .. @Override public void onCreate ( Bundle savedInstanceState ) { mUndoBtn = (Button) findViewById(R.id.undoBtn); mRedoBtn = (Button) findViewById(R.id.redoBtn); mUndoBtn.setOnClickLitener(undoNredoBtnClickListener); mRedoBtn.setOnClickLitener(undoNredoBtnClickListener); .. } .. protected OnClickListener undoNredoBtnClickListener = new OnClickListener(){ ... ..
Copyright 1995-2012 SAMSUNG All rights reserved
.. protected OnClickListener undoNredoBtnClickListener = new OnClickListener() { @Override public void onClick(View v) { if (v == mUndoBtn) { mCanvasView.undo(); onHistorychangeListener } else if (v == mRedoBtn) { mCanvasView.redo(); } mUndoBtn.setEnabled(mCanvasView.isUndoable()); mRedoBtn.setEnabled(mCanvasView.isRedoable());
} } ..
Copyright 1995-2012 SAMSUNG All rights reserved
public class SampleActivity extends Activity { .. @Override public void onCreate ( Bundle savedInstanceState ) { .. mCanvasView.setOnHistoryChangeListener (spriteChangeListener); ..
public class SampleActivity extends Activity { .. public CanvasView.OnHistoryChangeListener spriteChangeListener = new CanvasView.OnHistoryChangeListener () { .. @Override public void onHistoryChanged ( boolean bUndoable, boolean bRedoable){ mUndoBtn.setEnabled(bUndoable); mRedoBtn.setEnabled(bRedoable); } }
public class SampleActivity extends Activity { .. public void saveCanvas ( ) { .. byte[] buffer = mCanvasView.getData(); .. } .. public void loadCanvas ( String loadPath ) { .. byte[] buffer = ExampleUtils.readBytedata(loadPath); .. mCanvasView.setData(buffer); .. }
Copyright 1995-2012 SAMSUNG All rights reserved
CLASS PENSETTINGINFO
Manages the pen type settings Provides for each pen set & get methods for color, thickness, transparency Enables to change pen type
By specifying the x and y coordinates you can pan across the drawing
.. mCanvasView.panBy(x, y); ..
BACKGROUND SETTING
To set the background use setBackgrounfTemplate .. public void setBackgroundTemplete( Bitmap topBG, Bitmap middleBG, Bitmap bottomBG) ..
topBG The bitmap for top part background moddleBG The bitmap for middle part background bottomBG The bitmap for top bottom part background
SCANVASVIEW
Class SCanvasView inherits from class CanvasView Provides animation playback function Add BG data e.g. BG audio (Voice Recording or Audio File), BG color, Page Memo Add Basic Data e.g. Attach file, set extra data (string or int), APP ID, TAG, set title
SCANVASVIEW
Add SCanvasView to the layout XML file
.. <RelativeLayout android:id="@+id/canvas_container" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_height=#ffffffff"> <com.samsung.spensdk.SCanvasView android:id="@+id/canvas_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> </FrameLayout> .. <RelativeLayout android:id="@+id/canvas_container" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_height=#ffffffff"> <com.samsung.spensdk.SCanvasView android:id="@+id/canvas_view" android:layout_width=240dip" android:layout_height=320dip" android:layout_centerInParent="true" /> </FrameLayout>
Copyright 1995-2012 SAMSUNG All rights reserved
SCANVASVIEW
Initialize SCanvasView exactly like CanvasView public class SampleActivity extends Activity { .. private SCanvasView mCanvasView; .. mCanvasView = (SCanvasView) findViewById(R.id.canvas_view); .. How to add Basic Data @Override public boolean onOptionsItemSelected(Menu menu) { .. mCanvasView.addTag("TagName"); mCanvasView.putExtra("KEY1_PUT_EXTRA", "myExtraString); mCanvasView.putExtra("KEY2_PUT_EXTRA", 123); SDataAttachFile attachData = new SDataAttachFile(); attachData.setFileData(strFilePath, "SPen Example Selected File"); mCanvasView.attachFile(attachData); ..
}
Copyright 1995-2012 SAMSUNG All rights reserved
SCANVASVIEW
How to get Basic Data
.. String Tags = mCanvasView.getTags(); String myString = mCanvasView.getStringExtra("KEY1_PUT_EXTRA", null); int myInt = CanvasView.getIntExtra("KEY2_PUT_EXTRA", 0); int nAttachFileNum = mCanvasView.getAttachedFileNum(); for(int i=0; i<nAttachFileNum; i++) { SDataAttachFile attachData = mCanvasView.getAttachedFileData(i); } "myExtraString" 123
SCANVASVIEW
How to play animation
Before animation starts - save data associated with thew drawing .. String sDataKey = mCanvasView.saveSAMMData(); .. Create Samsung Animation Memo library inside of SCanvasView Load SAMM cached Data file using sDataKey value returned from saveSAMMData() Set as animation mode Start animation Public boolean OnWindowFocusChanged(boolean item) { super.onWindowFocusChanged(item); .. mAnimationCanvasView.createSAMMLibrary(); mAnimationCanvasView.setAnimationMode(true);
Intent intent = getIntent(); String sDataKey = intent.getStringExtra(EXTRA_VIEW_FILE_PATH); if(mAnimationCanvasView.loadSAMMData(sDataKey)) { mAnimationCanvasView.doAnimationStart(true); }
Copyright 1995-2012 SAMSUNG All rights reserved
ANIMATION
Show animation from the drawing
For GB, at least 128 MB (256 MB is recommendet) For ICS, at least 128 MB (for WXGA800 - 256 MB)
256 512
1.
2.
In 1.5 release:
The PenSettingInfo class has been added, Zoom functions have been added for the CanvasView, Panning function for the CanvasView has been added, Background setting function for the CanvasView has been added.
3.
In 2.0 release:
The SCanvasView Class inherited from CanvasView has been added, SAMM (Samsung Animated Multimedia Messaging) Library Class has been added Stroke and segmentation rendering have been enhanced, Undo function after clear all has been added, Adding image and text to the CanvasView.
4.
In 2.1 release:
S Pen SDK has been updated to support AVD Emulator,
SUMMARY
1. 2. 3. 4.
Add the view to be used to the layout xml file Register the CanvasView/SCanvasView and SettingView Register the SettingView to the CanvasView/SCanvasView Then you can control the pen and eraser settings popup and many other.
03
CONCLUSION
DEVELOPER.SAMSUNG.COM
To get the 2.0.1 version of S Pen SDK please visit http://developer.samsung.com/android/spen.sdk Discussion boards can be found on : http://developer.samsung.com/android by choosing Forums option.
THANK YOU.