Android 自定义 titleBar 控件,标题栏是一个应用不可缺少的部分,使用系统自带的控件有时候不能达到理想的效果,这时便可以自定义一个控件以后可以更据自己的需求更改,使用灵活方便。
先上图:
以下是代码
先自定义 xml 布局:
在 res——layout 目录下新建 layout_titlebar.xml 文件 <喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;">
ImageViewScale 是自定义实现 ImageView 的类可以根据需求自定义
- public class ImageViewScale extends ImageView {
- private boolean isClick;
- private ScaleAnimation animatorNormal,
- animatorSmaller;
- private float scaleFactor = 0.85f;
- public ImageViewScale(Context context) {
- super(context);
- init();
- }
- public ImageViewScale(Context context, AttributeSet attrs) {
- super(context, attrs);
- init();
- }
- public ImageViewScale(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- init();
- }
- private void init() {
- animatorNormal = new ScaleAnimation(scaleFactor, 1f, scaleFactor, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
- animatorNormal.setDuration(300);
- animatorNormal.setFillAfter(true);
- animatorSmaller = new ScaleAnimation(1f, scaleFactor, 1f, scaleFactor, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
- animatorSmaller.setDuration(300);
- animatorSmaller.setFillAfter(true);
- }@Override public boolean onTouchEvent(MotionEvent event) {
- switch (event.getAction()) {
- case MotionEvent.ACTION_DOWN:
- isClick = true;
- startAnimation(animatorSmaller);
- break;
- case MotionEvent.ACTION_MOVE:
- isOutSide(event);
- break;
- case MotionEvent.ACTION_UP:
- if (isClick) {
- isClick = false;
- startAnimation(animatorNormal);
- new Handler().postDelayed(new Runnable() {@Override public void run() {
- performClick();
- }
- },
- 300);
- }
- break;
- }
- return true;
- }
- private void isOutSide(MotionEvent event) {
- float viewX = event.getX();
- float viewY = event.getY();
- if (viewX < 0 || viewY < 0 || viewX > getWidth() || viewY > getHeight()) {
- if (isClick) {
- isClick = false;
- startAnimation(animatorNormal);
- }
- } else if (viewX > 0 || viewY > 0 || viewX < getWidth() || viewY < getHeight()) {
- if (!isClick) {
- isClick = true;
- startAnimation(animatorSmaller);
- }
- }
- }
- }
下面是自定义 titleBar 类
- public class TitleBar extends RelativeLayout {
- private TextView tvGoBack,
- tvTitle;
- private ImageView ivRight;
- private GoBackClickListener goBackListenter;
- private RightImageViewClickListener rightListener;
- public TitleBar(Context context) {
- super(context);
- Log.i("info", "1");
- }
- public TitleBar(Context context, AttributeSet attrs) {
- super(context, attrs);
- Log.i("info", "2");
- init();
- }
- public TitleBar(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- Log.i("info", "3");
- }
- private void init() {
- /** * 将自定义控件和布局文件进行绑定 * 参数一:View中可以通过getContext方法获取上下文对象 * 参数二:布局文件id * 参数三:放置该布局的容器,也就是本类 */
- View view = View.inflate(getContext(), R.layout.layout_titlebar, this);
- tvGoBack = (TextView) view.findViewById(R.id.tv_goback);
- tvTitle = (TextView) view.findViewById(R.id.tv_title);
- ivRight = (ImageView) view.findViewById(R.id.iv_right);
- tvGoBack.setOnClickListener(new OnClickListener() {@Override public void onClick(View v) {
- goBackListenter.onClick(v);
- }
- });
- ivRight.setOnClickListener(new OnClickListener() {@Override public void onClick(View v) {
- rightListener.onClick(v);
- }
- });
- }
- /** * 设置标题栏颜色 */
- public void setTitleBackground(int color) {
- tvTitle.setBackgroundColor(color);
- }
- /** * 设置标题 * * @param title */
- public void setTitle(String title) {
- tvTitle.setText(title);
- }
- /** * 设置标题颜色 * * @param color */
- public void setTitleColor(int color) {
- tvTitle.setTextColor(color);
- }
- /** * 设置右方图片的资源文件 * * @param resId */
- public void setRightImageView(int resId) {
- ivRight.setImageResource(resId);
- }
- public void setLeftImageView(int resId) {
- tvGoBack.setText("");
- tvGoBack.setBackgroundResource(resId);
- }
- public void setTitleTextSize(int size) {
- tvTitle.setTextSize(size);
- }
- /** * 显示右方的图片 */
- public void showRight() {
- ivRight.setVisibility(VISIBLE);
- }
- /** * 隐藏右方的图片 */
- public void hideRight() {
- ivRight.setVisibility(GONE);
- }
- public void hideLeft() {
- tvGoBack.setVisibility(GONE);
- }
- /** * 返回按钮点击的接口 */
- public interface GoBackClickListener {
- void onClick(View view);
- }
- /** * 右方图片点击时的接口回调 */
- public interface RightImageViewClickListener {
- void onClick(View view);
- }
- public void setGoBackListerner(GoBackClickListener listener) {
- this.goBackListenter = listener;
- }
- public void setRightListener(RightImageViewClickListener listener) {
- this.rightListener = listener;
- }
- public void setGoBackImageView(Bitmap bm) {
- tvGoBack.setBackground(new BitmapDrawable(bm));
- }
- }
至此自定义 titleBar 就写完了下面是使用方法:
- public class MainActivity extends AppCompatActivity {
- private TitleBar mTitleBar;@Override protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- mTitleBar = (TitleBar) findViewById(R.id.title_bar);
- mTitleBar.setTitle("测试标题");
- mTitleBar.setGoBackListerner(new TitleBar.GoBackClickListener() {@Override public void onClick(View view) {
- finish();
- }
- });
- mTitleBar.showRight();
- mTitleBar.setRightImageView(R.mipmap.ic_launcher);
- mTitleBar.setRightListener(new TitleBar.RightImageViewClickListener() {@Override public void onClick(View view) {
- finish();
- }
- });
- }
- }
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/03-12/18561911.html