- 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
自定义控件
旋转菜单
下拉选择
下拉刷新
滑动开关
轮播图 广告条
侧边栏SlidingMenu
水波纹
自定义ViewPager
快速索引
粘性控件
视差特效
侧滑面板
侧拉删除
等比例显示控件
流式布局FlowLayout
3D画廊
自定义吐司
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);
}
}