- Android中Canvas繪圖基礎詳解
- Android Paint、Canvas、Matrix使用講解(一、Paint)
- Android Paint之 setXfermode PorterDuffXfermode 講解
- Canvas開篇之drawBitmap方法講解
- Android 手把手教您自定義ViewGroup(一)
- Android 自定義View (一)
- Android 自定義View (二) 進階
- Android 自定義View (三) 圓環交替 等待效果
- Android 自定義View (四) 視頻音量調控
- Android 深入理解Android中的自定義屬性
- Android ViewDragHelper完全解析 自定義ViewGroup神器
- Android 自定義控件實戰
- Android LayoutInflater原理分析,帶你一步步深入瞭解View(一)
- Android視圖繪製流程完全解析,帶你一步步深入瞭解View(二)
- Android視圖狀態及重繪流程分析,帶你一步步深入瞭解View(三)
- Android自定義View的實現方法,帶你一步步深入瞭解View(四)
- Android自定義控件三部曲文章索引
- 自定義View:測量measure,佈局layout,繪製draw
自定義控件
- 滑動開關
- 自定義ViewPager
- 粘性控件
- 側滑刪除
- 視差特效
- 側邊欄SlidingMenu
- 3D畫廊 Gallery
- 流式佈局FlowLayout
- 水波紋Ripple
- 旋轉菜單
- 下拉刷新
- 側滑面板
- 快速索引
- 輪播圖/廣告條
- 等比例顯示控件
- 下拉選擇框Spinner
- 微信朋友圈,QQ空間,微博等列表展示的功能實現
旋轉菜單
下拉選擇
下拉刷新
滑動開關
輪播圖 廣告條
側邊欄SlidingMenu
水波紋
自定義ViewPager
快速索引
粘性控件
視差特效
側滑面板
側拉刪除
等比例顯示控件
流式佈局FlowLayout
3D畫廊
微信朋友圈,QQ空間,微博等列表展示的功能實現
自定義吐司
public class AddressTost implements OnTouchListener {
private WindowManager mWM;
private Context mContext;
private WindowManager.LayoutParams mParams;
private TextView mLocation;
private TextView mView;
public AddressTost(Context context) {
this.mContext = context;
mWM = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
mParams = new WindowManager.LayoutParams();
WindowManager.LayoutParams params = mParams;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
// | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE //需要toast 有觸摸事件
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
params.format = PixelFormat.TRANSLUCENT;
// params.windowAnimations =
// com.android.internal.R.style.Animation_Toast;
// params.type = WindowManager.LayoutParams.TYPE_TOAST;//土司天生沒有觸摸事件
params.type = WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;//換成電話的類型
/**
* 展示號碼歸屬地顯示
*/
public void show(String location) {
mLocation = (TextView) view.findViewById(R.id.tv_location);
mView = new TextView(mContext);
// 設置歸屬地的顏色
mView.setBackgroundColor(Color.RED);
// 設置歸屬地的位置
mLocation.setText(location);
mWM.addView(mView, mParams);
}
/**
* 隱藏號碼歸屬地
*/
public void hide() {
// 隱藏土司
if (mView!= null) {
// note: checking parent() just to make sure the view has
// been added... i have seen cases where we get here when
// the view isn't yet added, so let's try not to crash.
if (mView.getParent() != null) {
// if (localLOGV) Log.v(TAG, "REMOVE! " + mView + " in " +
// this);
mWM.removeView(mView);
}
view = null;
}
}
}
自定義對話框
public class AddressDialog extends Dialog {
private Window window;
private OnItemClickListener mOnItemClickListener;
//把我們自己的樣式傳給父類
//屏蔽父類裏面的樣式
public AddressDialog(Context context) {
super(context, R.style.AddressDialogStyle);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_address_style);
window = getWindow();
//獲取到當前窗體的樣式
LayoutParams params = window.getAttributes();
params.gravity = Gravity.BOTTOM;
// | Gravity.CENTER_HORIZONTAL;
//設置窗體的屬性
window.setAttributes(params);
}
}