intTypePromotion=1

Lập trình Android 3.0

Chia sẻ: Nguyen Hoang Dac | Ngày: | Loại File: DOC | Số trang:9

0
113
lượt xem
47
download

Lập trình Android 3.0

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Một trong những cải tiến của Android 3.0 so với các đời Android trước là hỗ trợ trực tiếp cho lập trình viên về việc lập trình xử lý Drag, Drop. Trong bài viết sau đây mình sẽ tạo 1 ứng dụng nho nhỏ demo cho tính năng này.

Chủ đề:
Lưu

Nội dung Text: Lập trình Android 3.0

  1. Trung tâm Tin học – ĐH KHTN Drag và Drop trên Android 3.0 Một trong những cải tiến của Android 3.0 so với các đ ời Android tr ước là h ỗ tr ợ tr ực tiếp cho lập trình viên về việc lập trình xử lý Drag, Drop. Trong bài vi ết sau đây mình sẽ tạo 1 ứng dụng nho nhỏ demo cho tính năng này. 1/ Các bạn tạo Project như sau: Project name: DragDropDemo Build Target: Android 3.0 Application name: DragDropDemo Package name: com.dac.drag.drop.demo Create Activity: MainActivity 2/ Trong folder Layout các bạn tạo 2 file lay out đ ể dùng làm fragment cho ứng d ụng : + dropzone.xml : Lập trình Android – http://laptrinhdidong.vn Page 1
  2. Trung tâm Tin học – ĐH KHTN + Palette.xml: Trong file main.xml các bạn sữ dụng 2 file trên:
  3. Trung tâm Tin học – ĐH KHTN android:id="@+id/dropzone" android:layout_width="0px" android:layout_height="match_parent" android:layout_weight="2" /> 3/ Trong folder values/ các bạn tạo file attrs.xml để quy đ ịnh thuoc tính cho 2 nút mình sẽ tạo bằng file Java: 4/ Và trong Package chính các bạn tạo các file đ ể vẽ và sử lý các nút (dot) đ ồng th ời cũng sinh ra các Log để theo dõi trong View Debug: + Dot.java: package com.dac.drag.drop.demo; import android.content.ClipData; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.util.Log; import android.view.DragEvent; import android.view.View; public class Dot extends View implements View.OnDragListener { private static final int DEFAULT_RADIUS = 20; private static final int DEFAULT_COLOR = Color.WHITE; private static final int SELECTED_COLOR = Color.MAGENTA; protected static final String DOTTAG = "DragDot"; private Paint mNormalPaint; private Paint mDraggingPaint; private int mColor = DEFAULT_COLOR; Lập trình Android – http://laptrinhdidong.vn Page 3
  4. Trung tâm Tin học – ĐH KHTN private int mRadius = DEFAULT_RADIUS; private boolean inDrag; public Dot(Context context, AttributeSet attrs) { super(context, attrs); TypedArray myAttrs = context.obtainStyledAttributes(attrs, R.styleable.Dot); final int numAttrs = myAttrs.getIndexCount(); for (int i = 0; i < numAttrs; i++) { int attr = myAttrs.getIndex(i); switch (attr) { case R.styleable.Dot_radius: mRadius = myAttrs.getDimensionPixelSize(attr, DEFAULT_RADIUS); break; case R.styleable.Dot_color: mColor = myAttrs.getColor(attr, DEFAULT_COLOR); break; } } myAttrs.recycle(); mNormalPaint = new Paint(); mNormalPaint.setColor(mColor); mNormalPaint.setAntiAlias(true); mDraggingPaint = new Paint(); mDraggingPaint.setColor(SELECTED_COLOR); mDraggingPaint.setAntiAlias(true); setOnLongClickListener(lcListener); setOnDragListener(this); } private static View.OnLongClickListener lcListener = new View.OnLongClickListener() { private boolean mDragInProgress; public boolean onLongClick(View v) { ClipData data = ClipData.newPlainText("DragData", (String)v.getTag()); mDragInProgress = v.startDrag(data, new View.DragShadowBuilder(v), (Object)v, 0); Log.v((String) v.getTag(), "starting drag? " + mDragInProgress); return true; } }; @Override protected void onMeasure(int widthSpec, int heightSpec) { int size = 2*mRadius + getPaddingLeft() + getPaddingRight(); Lập trình Android – http://laptrinhdidong.vn Page 4
  5. Trung tâm Tin học – ĐH KHTN setMeasuredDimension(size, size); } public boolean onDrag(View v, DragEvent event) { String dotTAG = (String) getTag(); if(event.getLocalState() != this) { Log.v(dotTAG, "This drag event is not for us"); return false; } boolean result = true; int action = event.getAction(); float x = event.getX(); float y = event.getY(); switch(action) { case DragEvent.ACTION_DRAG_STARTED: Log.v(dotTAG, "drag started. X: " + x + ", Y: " + y); inDrag = true; break; case DragEvent.ACTION_DRAG_LOCATION: Log.v(dotTAG, "drag proceeding... At: " + x + ", " + y); break; case DragEvent.ACTION_DRAG_ENTERED: Log.v(dotTAG, "drag entered. At: " + x + ", " + y); break; case DragEvent.ACTION_DRAG_EXITED: Log.v(dotTAG, "drag exited. At: " + x + ", " + y); break; case DragEvent.ACTION_DROP: Log.v(dotTAG, "drag dropped. At: " + x + ", " + y); result = false; break; case DragEvent.ACTION_DRAG_ENDED: Log.v(dotTAG, "drag ended. Success? " + event.getResult()); inDrag = false; break; default: Log.v(dotTAG, "some other drag action: " + action); result = false; break; } return result; } public void draw(Canvas canvas) { float cx = this.getWidth()/2 + getLeftPaddingOffset(); float cy = this.getHeight()/2 + getTopPaddingOffset(); Paint paint = mNormalPaint; if(inDrag) paint = mDraggingPaint; canvas.drawCircle(cx, cy, mRadius, paint); invalidate(); Lập trình Android – http://laptrinhdidong.vn Page 5
  6. Trung tâm Tin học – ĐH KHTN } } + Palette.java : package com.dac.drag.drop.demo; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Palette extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle icicle) { View v = inflater.inflate(R.layout.palette, container, false); return v; } } + DropZone.java : package com.dac.drag.drop.demo; import android.animation.ObjectAnimator; import android.app.Fragment; import android.content.ClipData; import android.os.Bundle; import android.util.Log; import android.view.DragEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.CycleInterpolator; import android.widget.TextView; public class DropZone extends Fragment { Lập trình Android – http://laptrinhdidong.vn Page 6
  7. Trung tâm Tin học – ĐH KHTN private View dropTarget; private TextView dropMessage; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle icicle) { View v = inflater.inflate(R.layout.dropzone, container, false); dropMessage = (TextView)v.findViewById(R.id.dropmessage); dropTarget = (View)v.findViewById(R.id.droptarget); dropTarget.setOnDragListener(new View.OnDragListener() { private static final String DROPTAG = "DropTarget"; private int dropCount = 0; private ObjectAnimator anim; public boolean onDrag(View v, DragEvent event) { int action = event.getAction(); boolean result = true; switch(action) { case DragEvent.ACTION_DRAG_STARTED: Log.v(DROPTAG, "drag started in dropTarget"); break; case DragEvent.ACTION_DRAG_ENTERED: Log.v(DROPTAG, "drag entered dropTarget"); anim = ObjectAnimator.ofFloat((Object)v, "alpha", 1f, 0.5f); anim.setInterpolator(new CycleInterpolator(40)); anim.setDuration(30*1000); // 30 seconds anim.start(); break; case DragEvent.ACTION_DRAG_EXITED: Log.v(DROPTAG, "drag exited dropTarget"); if(anim != null) { anim.end(); anim = null; } break; case DragEvent.ACTION_DRAG_LOCATION: Log.v(DROPTAG, "drag proceeding in dropTarget: " + event.getX() + ", " + event.getY()); break; case DragEvent.ACTION_DROP: Log.v(DROPTAG, "drag drop in dropTarget"); if(anim != null) { anim.end(); anim = null; } ClipData data = event.getClipData(); Lập trình Android – http://laptrinhdidong.vn Page 7
  8. Trung tâm Tin học – ĐH KHTN Log.v(DROPTAG, "Item data is " + data.getItemAt(0).getText()); dropCount++; String message = dropCount + " drop"; if(dropCount > 1) message += "s"; dropMessage.setText(message); break; case DragEvent.ACTION_DRAG_ENDED: Log.v(DROPTAG, "drag ended in dropTarget"); if(anim != null) { anim.end(); anim = null; } break; default: Log.v(DROPTAG, "other action in dropzone: " + action); result = false; } return result; } }); return v; } } + MainActivity.java : package com.dac.drag.drop.demo; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } Khi debug, ngoài việc các bạn kéo thả các nút vào ô vuông thì b ạn còn có th ể xem hoạt động đồng thời của việc drop, drap thông qua View Debug: Lập trình Android – http://laptrinhdidong.vn Page 8
  9. Trung tâm Tin học – ĐH KHTN Mọi ý kiến đóng góp các bạn vui lòng gữi bài viết về forum: http://forum.laptrinhdidong.vn . Rất mong nhận được sự phản hồi từ các bạn Lập trình Android – http://laptrinhdidong.vn Page 9

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản