自定义Android标题栏TitleBar布局

Android 上滑隐藏标题栏下滑显示标题栏(带动画效果、无卡顿、无空白) Android 手势检测上下滑动,上滑隐藏标题栏下滑显示标题栏,带动画效果、无卡顿、无空白。 适用各种情况,代码简单明了。 立即下载

效果展示:
这里写图片描述
自定义Android标题栏TitleBar布局,右边的图片可实现动画效果。

代码展示:
1.MainActivity中的布局:

 <com.example.administrator.gamehleper.widget.TitleBar
        android:id="@+id/title_bar"
        android:layout_width="match_parent"
        android:layout_height="48dp" />

2.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);
    }

    public TitleBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public TitleBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    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);
            }
        });
    }

    /**
     * 设置标题
     *
     * @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 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;
    }
}

3.layout_titlebar布局中的代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="#00f0ff"
    android:layout_height="48dp">
    <TextView
        android:id="@+id/tv_goback"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:layout_centerVertical="true"
        android:layout_margin="4dp"
        android:text="返回" />

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:layout_centerInParent="true"
        android:textSize="16sp"
        android:text="title"/>

    <com.qianfeng.gamehelper.widget.ImageViewScale
        android:id="@+id/iv_right"
        android:layout_width="48dp"
        android:layout_alignParentRight="true"
        android:layout_height="48dp"
        android:padding="6dp"/>
</RelativeLayout>

4.实现图片动画效果ImageViewScale类的代码:

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);
            }
        }
    }

}

5.在MainActivity类中代码:
这个方法用来修改titleBar的值的代码

 protected void init() {
        titleBar.setLeftImageView(R.mipmap.ic_launcher);
        titleBar.setRightImageView(R.mipmap.fmt_home_iconfont_guanyu);
        titleBar.setTitle("72G游戏助手");
        titleBar.setTitleTextSize(24);
    }

这个方法用来监听点击事件

 protected void initEvent() {
        titleBar.setGoBackListerner(new TitleBar.GoBackClickListener() {
            @Override
            public void onClick(View view) {

            }
        });
        titleBar.setRightListener(new TitleBar.RightImageViewClickListener() {
            @Override
            public void onClick(View view) {

            }
        });

    }
Cadence安装 选择刚刚解压的E盘DVD驱动中的setup.exe文件,安装路径推荐D盘,此处会自己给你新建文件夹,我们无需手动建文件夹。但是,新产品有一些BUG(影响使用流畅性),所以我们要对17.4打补丁,补丁包同样去吴川斌的博客下载。下载阿狸狗破戒大师 我这边下载的是版本V3.2.6,同样在吴川斌的博客下载安装包,链接同上。记录一下安装过程,方便以后安装使用Cadence。破解完成后,建议将这两个软件创建快捷方式到桌面。到这里,我们已经可以正常的使用Cadence了。对光盘映像文件解压后双击,可以在我的电脑看到。 阅读详情

相关推荐

BODAS说明书的中文版与相关资料总结

花了三天时间配了控制器的接线口,找了软件安装的一套东西。 又花了一周时间零零散散在网上只找到关于控制器少得可怜的资料: 1.力士乐控制器RC6系列介绍 2.力士乐控制器手册不完整版 3.RC6-9程序下载 力士乐配套的只有德语和英语两版,人工翻译专业文件的价格太惊人,决定自己写一版方便大家。有不正之处欢迎指出。 For these controllers, in the event of an...

我的技术日常 6492

Android TitleBar标题栏

开发过程中会遇见很多app顶部的控制栏,封装一个通用TitleBar attrs.xml &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;resources&gt; &lt;declare-styleable name="TitleBar"&gt; &lt;!--标题--&gt; &a

xiangxiongfly 1734

跨时钟域传输数据——单bit和多bit信号(总结)

总结单bit和多bit信号的跨时钟域传输

qq_42135020的博客 1万+

android标题栏渐变动画,Android 顶部标题栏随滑动时的渐变隐藏和渐变显示效果

各位早上好,话不多说,先上效果图:注意顶部:首页textview的变化(显示和隐藏)!首先分析下:ui状态,其是由recyclerview添加头部组成+recyclerview头部添加和recyclerview分别引用如下:具体的分装数据的过程这里就不在说明,下篇博客会更加深入的写关于recyclerview总添加多种不同type类型compile 'com.bartoszlipinski.rec...

weixin_42401159的博客 807

机器学习ROC曲线中的阈值thresholds

在ROC曲线上的不同点对应于不同的阈值。根据任务的具体要求,可以选择合适的阈值,以达到平衡召回率和误报率,或者根据具体应用场景调整模型的工作点。,表示样本属于正例的概率。这个概率值可以被截断为二元分类的决策,通过选择一个阈值来决定样本是被分类为正例还是负例。通过改变阈值,可以得到不同的真正例率(TPR)和假正例率(FPR),从而绘制出ROC曲线。总体来说,ROC曲线提供了模型在不同阈值下的性能综合情况,帮助分析模型的分类能力。通常来说,随着阈值的增加,TPR会减小,而FPR会增加。ROC曲线的绘制涉及。

行子的博客 3654

【第1章>第9节】基于FPGA的图像开运算处理算法的Verilog实现

本文介绍了基于FPGA的开运算图像处理实现方法。主要内容包括:1)输入图像二值化处理,通过阈值将灰度图像转换为二值图像;2)数据缓存与窗口提取,使用寄存器数组缓存5行图像数据并构建5×5处理窗口;3)腐蚀运算逻辑,判断窗口内是否全为白色像素;4)膨胀运算逻辑,检测窗口内是否存在白色像素。最后给出了Verilog实现方案,通过级联腐蚀和膨胀模块完成开运算处理。该方法可用于FPGA图像处理算法开发。

MATLAB,verilog,python,opencv,tensorflow,caffe,C,C++ 313

安卓之自定义标题栏

在layout下创建一个cutom_title.xml布局文件,名字可以随便起,在布局文件里添加按钮、标题文字等信息。在AndroidManifest.xml里修改Android:theme的属行为。这里的按键使用的是文字,也可以使用漂亮的图片根据自己的需要调整。android:text="温控器"保存在运行,原有的标题栏就消失了。android:text="返回"android:text="设置"在布局xml中加入红色代码就可以了。

landlde的博客 1898

机器学习实战4-教育领域:学生成绩的可视化分析与成绩预测-详细分析

大家好,我是微学AI,今天给大家带来机器学习实战4-学生成绩的可视化分析与成绩预测,机器学习在教育中的应用具有很大的潜力,特别是在学生成绩的可视化分析与成绩预测方面。机器学习可以通过对学生的父母教育情况和学校表现等数据进行分析和挖掘,从而揭示潜在的学习模式和趋势。

微学AI的博客 7676

android标题栏渐变动画,Android 滑动Scrollview标题栏渐变效果(仿京东toolbar)

Scrollview标题栏滑动渐变仿京东样式(上滑显示下滑渐变消失)/*** @ClassName MyScrollView* @Author Rex* @Date 2021/1/27 17:38*/public class MyScrollView extends ScrollView {private TranslucentListener mTranslucentListener;publi...

weixin_33547979的博客 654

webrtc+uniapp(h5和app)实现在线聊天功能 uniapp+网页+服务端源码

uniapp端代码 服务端代码 public/index.html

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 754

姿态传感器/陀螺仪之LSM6DSLTR应用驱动程序设计

* LSM6DSLTR I2C地址(SA0=1) *//* 初始化LSM6DSLTR传感器(加速度计±2g,陀螺仪±250°/s) *//* 加速度计灵敏度 *//* 角速度值(°/s) *//* I2C句柄 *//* 陀螺仪灵敏度 *//* 加速度值(g) *//* 温度值(°C) *//* 设备地址 *//* IF_INC=1: 自动增量地址 *//* 10Hz采样率 *//* 配置I2C1引脚:PB6->SCL, PB7->SDA *//* 转换为实际温度值(°C),参考手册中温度计算公式 */

corlin6688的博客 394

复用自定义布局TitleBar

第一种方案:addView第二种方案:自定义控件 第一种方案: TitleBar布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_co

源于未知 730

弹窗提示报错: F:\c\CFX5\bin\Debug\net9.0-windows10.0.26100.0\CFX5.dll 面向无法动态枚举工具箱项目的平台...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 944

自定义Android 标题栏TitleBar布局

http://www.blogjava.net/Green-nut/articles/332617.html?opt=admin   自定义Android 标题栏TitleBar布局 很多网友发现自己Android程序的标题栏TitleBar区域很单调,如果想个性化一些可以通过下面的方法来为自己软件的标题定制一个layout布局文件,比如浏览器的标题栏,它包含了网站的Favicon,自定...

java-admin 255

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

自定义Android标题栏修改TitleBar的布局

Android程序默认的Activity标题栏只能显示一段文字,而且不能改变它的布局、颜色、标题栏的高度等。如果想要在标题栏加上个图标、button、输入框、进度条、修改标题栏颜色等,只能使用自定义的标题栏。自定义标题栏可以通过在onCreate函数中添加以下代码来实现,需要注意的是代码的顺序必须按照下面的样式,否则将无效。   requestWindowFeature(Window.FEATU

aust_glj的博客 514

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

自定义ANDROID标题栏TITLEBAR布局

自定义ANDROID标题栏TITLEBAR布局 很多网友发现自己Android程序的标题栏TitleBar区域很单调,如果想个性化一些可以通过下面的方法来为自己软件的标题定制一个layout布局文件,比如浏览器的标题栏,它包含了网站的Favicon,自定义的进度条,和不确定的进度指示等等,实现的方法自己控制吧。下面代码在onCreate中使用,同时顺序不要改变,否则将无法生效: requestW

zcmain的专栏 1152

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: TextView属性大全+单行显示长文本
下一篇: 点击图片产生水波的动画效果代码展示
Allen-华
博客等级 码龄11年 10粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值