編輯:關於Android編程
public class BaseView extends RelativeLayout{ public Context context; public BaseView(Context context) { super(context); this.context = context; } public BaseView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; } public BaseView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.context = context; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } }
public class SearchDevicesView extends BaseView{ public static final String TAG = "SearchDevicesView"; public static final boolean D = BuildConfig.DEBUG; @SuppressWarnings("unused") private long TIME_DIFF = 1500; int[] lineColor = new int[]{0x7B, 0x7B, 0x7B}; int[] innerCircle0 = new int[]{0xb9, 0xff, 0xFF}; int[] innerCircle1 = new int[]{0xdf, 0xff, 0xFF}; int[] innerCircle2 = new int[]{0xec, 0xff, 0xFF}; int[] argColor = new int[]{0xF3, 0xf3, 0xfa}; private float offsetArgs = 0; private boolean isSearching = false; private Bitmap bitmap; private Bitmap bitmap1; private Bitmap bitmap2; public boolean isSearching() { return isSearching; } public void setSearching(boolean isSearching) { this.isSearching = isSearching; offsetArgs = 0; invalidate(); } public SearchDevicesView(Context context) { super(context); initBitmap(); } public SearchDevicesView(Context context, AttributeSet attrs) { super(context, attrs); initBitmap(); } public SearchDevicesView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initBitmap(); } private void initBitmap(){ if(bitmap == null){ bitmap = Bitmap.createBitmap(BitmapFactory.decodeResource(context.getResources(), R.drawable.gplus_search_bg)); } if(bitmap1 == null){ bitmap1 = Bitmap.createBitmap(BitmapFactory.decodeResource(context.getResources(), R.drawable.locus_round_click)); } if(bitmap2 == null){ bitmap2 = Bitmap.createBitmap(BitmapFactory.decodeResource(context.getResources(), R.drawable.gplus_search_args)); } } @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(bitmap, getWidth() / 2 - bitmap.getWidth() / 2, getHeight() / 2 - bitmap.getHeight() / 2, null); if(isSearching){ Rect rMoon = new Rect(getWidth()/2-bitmap2.getWidth(),getHeight()/2,getWidth()/2,getHeight()/2+bitmap2.getHeight()); canvas.rotate(offsetArgs,getWidth()/2,getHeight()/2); canvas.drawBitmap(bitmap2,null,rMoon,null); offsetArgs = offsetArgs + 3; }else{ canvas.drawBitmap(bitmap2, getWidth() / 2 - bitmap2.getWidth() , getHeight() / 2, null); } canvas.drawBitmap(bitmap1, getWidth() / 2 - bitmap1.getWidth() / 2, getHeight() / 2 - bitmap1.getHeight() / 2, null); if(isSearching) invalidate(); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: handleActionDownEvenet(event); return true; case MotionEvent.ACTION_MOVE: return true; case MotionEvent.ACTION_UP: return true; } return super.onTouchEvent(event); } private void handleActionDownEvenet(MotionEvent event){ RectF rectF = new RectF(getWidth() / 2 - bitmap1.getWidth() / 2, getHeight() / 2 - bitmap1.getHeight() / 2, getWidth() / 2 + bitmap1.getWidth() / 2, getHeight() / 2 + bitmap1.getHeight() / 2); if(rectF.contains(event.getX(), event.getY())){ if(D) Log.d(TAG, "click search device button"); if(!isSearching()) { setSearching(true); }else{ setSearching(false); } } } }
1 秒殺業務分析正常電子商務流程(1)查詢商品;(2)創建訂單;(3)扣減庫存;(4)更新訂單;(5)付款;(6)賣家發貨秒殺業務的特性(1)低廉價格;(2)大幅推廣;(
下面仿一個Android手寫板和塗鴉的功能,直接上代碼:write_pad.xml <framelayout android:id=@+id/ta
先看一下項目的結構 可以看出每個功能模塊包含 XXActivity,XXView (Interface),XXPresenter(interfac
和Android UI layout一樣,我們也可以在XML中定義應用程序的菜單。通過在菜單的onCreateOptionsMenu方法中膨脹菜單layout。這樣做會使