Android自定义控件

  1. Android中Canvas绘图基础详解
  2. Android Paint、Canvas、Matrix使用讲解(一、Paint)
  3. Android Paint之 setXfermode PorterDuffXfermode 讲解
  4. Canvas开篇之drawBitmap方法讲解
  5. Android 手把手教您自定义ViewGroup(一)
  6. Android 自定义View (一)
  7. Android 自定义View (二) 进阶
  8. Android 自定义View (三) 圆环交替 等待效果
  9. Android 自定义View (四) 视频音量调控
  10. Android 深入理解Android中的自定义属性
  11. Android ViewDragHelper完全解析 自定义ViewGroup神器
  12. Android 自定义控件实战
  13. Android LayoutInflater原理分析,带你一步步深入了解View(一)
  14. Android视图绘制流程完全解析,带你一步步深入了解View(二)
  15. Android视图状态及重绘流程分析,带你一步步深入了解View(三)
  16. Android自定义View的实现方法,带你一步步深入了解View(四)
  17. Android自定义控件三部曲文章索引
  18. 自定义View:测量measure,布局layout,绘制draw

自定义控件

旋转菜单

下拉选择

下拉刷新

滑动开关

轮播图 广告条

自定义控件

侧边栏SlidingMenu

水波纹

自定义控件

自定义ViewPager

快速索引

粘性控件

视差特效

侧滑面板

DragLayout

侧拉删除

等比例显示控件

流式布局FlowLayout

3D画廊

自定义吐司

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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;
}
}
}

自定义对话框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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);
}
}
坚持原创技术分享,您的支持将鼓励我继续创作!