精华内容
下载资源
问答
  • 尤其是一个简单的遥控按钮布局的问题,几张规则的按钮图片拼凑在一起,点击事件之间总是受影响,所以,尝试去想很多办法去解决,但唯一能想到的就是自定义View的方式去确认每个点击位置,对位置精确化,但这看似...

       这几天一直被公司的项目所困扰,尤其是一个简单的遥控按钮布局的问题,几张不规则的按钮图片拼凑在一起,点击事件之间总是受影响,所以,尝试去想很多办法去解决,但唯一能想到的就是自定义View的方式去确认每个点击位置,对位置精确化,但这看似简单,做起来很繁琐,当然自己能力有限,自定义View这块的知识并不是很牢固,所以没多尝试,直接pass掉了。之后会多研究自定义View,希望在这块能写下一份专栏式的笔记,以后好回忆。

      最好逛逛github,既然找到了一种比较简单的思路,同样是自定义View,不过这个简单多了。思路就是取得不规则图片,然后识别出其非透明状态的形状,只对改形状获取点击事件,就这样简单的完成了。

       代码如下:

       

    /**
     * 描述:自定义实现不规则按钮交互效果
     * Created by jrue on 2015/10/9.
     */
    public class IrregularButton extends ImageView {
    
        //当前布局尺寸
        private int width = -1;
        private int height = -1;
    
        private Bitmap bitmap;
        private Context mContext;
    
        //实际图片缩放比例
        float viewScaleX;
        float viewScaleY;
    
        private int bgColor;
    
        public IrregularButton(Context context) {
            super(context);
            this.mContext = context;
        }
    
        public IrregularButton(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            this.mContext = context;
        }
    
        public IrregularButton(Context context, AttributeSet attrs) {
            super(context, attrs);
            this.mContext = context;
            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.IrregularButton);
            bgColor = a.getColor(R.styleable.IrregularButton_bgcolor, getResources().getColor(android.R.color.transparent));
            a.recycle();
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            int action = event.getAction();
            if (action != MotionEvent.ACTION_DOWN) {
                return super.onTouchEvent(event);
            }
            //获取背景selector
            if (width == -1 || height == -1) {
                Object object = getDrawable();
                if (object instanceof BitmapDrawable) {
                    //如果没有使用selector
                    BitmapDrawable bitmapDrawable = (BitmapDrawable) object;
                    bitmap = bitmapDrawable.getBitmap();
                } else {
    
                    //获取selector
                    StateListDrawable drawable = ((StateListDrawable) object);
                    Class<StateListDrawable> c = StateListDrawable.class;
                    try {
                        //获取背景selecttor个数,如果有两个,则取当前的
                        Method methodCount = c.getMethod("getStateCount");
                        int count = (int) methodCount.invoke(drawable);
                        if (count > 1) {
                            Drawable selectorDrawable = drawable.getCurrent();
                            bitmap = ((BitmapDrawable) selectorDrawable).getBitmap();
                        } else {
                            //获取没有显示的特定图片
                            Method method = c.getMethod("getStateDrawable", int.class);
                            Drawable selectorDrawable = (Drawable) method.invoke(drawable, 0);
                            bitmap = ((BitmapDrawable) selectorDrawable).getBitmap();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
    
                width = getWidth();
                height = getHeight();
    
                viewScaleX = (width / (float) bitmap.getWidth());
                viewScaleY = (height / (float) bitmap.getHeight());
            }
            int x = (int) (event.getX() / viewScaleX);
            int y = (int) (event.getY() / viewScaleY);
            //判断请求是否超出范围
            if (null == bitmap || x < 0 || y < 0 || x >= width || y >= height) {
                return false;
            }
            //获取像素
            int pixel = bitmap.getPixel(x, y);
            //判断像素是否是指定空白颜色,阻止请求
            if (pixel == bgColor) {
                return false;
            }
            return super.onTouchEvent(event);
        }
    
    }
    

    还有attrs.xml文件里自定义的属性:

       <!-- 不规则按钮的实现 -->
        <declare-styleable name="IrregularButton">
            <attr name="bgcolor" format="color"/>
        </declare-styleable>

    在布局中这样用:

     <com.meizu.router.widget.IrregularButton
                android:id="@+id/btn_tv_ok"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:src="@drawable/remote_tv_key_ok"
                mzsz:bgcolor="@android:color/transparent" />

    别忘了再头部加上:

     xmlns:mzsz="http://schemas.android.com/apk/res-auto"

    就这样OK,完美。
    展开全文
  • 最近项目上有这样一个需求,在图片的指定位置添加按钮,图片随着...需要在红色的圆形区域添加按钮,如果直接放在指定位置呢,窗口大小改变了,图片位置也就改变了,能像布局那样随着窗口的大小而改变,期间还参考了这个...

    最近项目上有这样一个需求,在图片的指定位置添加按钮,图片随着窗口的大小而改变,按钮位置随着图片的大小改变而改变,具体图片是这样的:

    需要在红色的圆形区域添加按钮,如果直接放在指定位置呢,窗口大小改变了,图片的位置也就改变了,不能像布局那样随着窗口的大小而改变,期间还参考了这个http://stevenshi.me/2017/05/09/qt-widget-designated-location/,没有达到我要的效果.最终在群里大佬的指点下,整理了出来,最终效果:

    思路就是重写resizeEvent,直接贴上代码:

    #ifndef TCS_H
    #define TCS_H
    
    #include <QWidget>
    #include <QPixmap>
    #include <QPushButton>
    #include <QRect>
    #include <QMap>
    #include <QResizeEvent>
    #include <QPaintEvent>
    
    namespace Ui {
    class TCS;
    }
    
    class TCS : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit TCS(QWidget *parent = 0);
        ~TCS();
    protected:
        void resizeEvent(QResizeEvent *ev);
         void paintEvent(QPaintEvent *e);
    
    private:
        Ui::TCS *ui;
        QPixmap m_bg;
        QMap <QAbstractButton*,QRect> m_btns;
    
    };
    
    #endif // TCS_H
    
    #include "tcs.h"
    #include "ui_tcs.h"
    #include <QPainter>
    
    TCS::TCS(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::TCS)
    {
        ui->setupUi(this);
        m_bg = QPixmap(":/new/prefix1/image/tcs/tcs.png");
        foreach (auto btn, ui->buttonGroup->buttons()) {
            m_btns[btn] = btn->geometry();
        }
    
    }
    
    TCS::~TCS()
    {
        delete ui;
    }
    void TCS::paintEvent(QPaintEvent *e)
    {
        QPainter painter(this);
        painter.drawPixmap(rect(),m_bg);
    }
    
    void TCS::resizeEvent(QResizeEvent *ev)
    {
        QWidget::resizeEvent(ev);
        QMatrix m;
        m.scale(ev->size().width()*1.0/m_bg.width(),
                ev->size().height()*1.0/m_bg.height());
        foreach (auto btn, m_btns.keys()) {
            btn->setGeometry(m.mapRect(m_btns[btn]));
        }
    }
    

    下载地址:https://download.csdn.net/download/yu_20501253/11380320

    展开全文
  • android App布局

    2017-01-02 02:13:56
    我想做一个如下图(1)的布局,上面四个位置和下面三个位置全是按钮,中间区域留着添加按钮、图片、文字等功能。 想请教几个问题: 1:使用什么Layout布局一定是layout布局,我太清楚,能实现就可以)可以...
    我想做一个如下图(1)的布局,上面四个位置和下面三个位置全是按钮,中间区域留着添加按钮、图片、文字等功能。
    想请教几个问题:
    1:使用什么Layout布局(不一定是layout布局,我不太清楚,能实现就可以)可以实现如图(1)所示的样子,请帮我大概描述一下。要求上面的四个按钮和下面的三个按钮是不动的,就是不会因为中间区域大小的变化而改变。希望给出个相对布局的方法,使用绝对的位置设置太局限了。
    2:我想把按钮的样子设置的美观些,效果与如图(2)顶端的标题栏所示(就是推荐、热点、杭州等位置)类似就可以,所有按钮并列放着,没点击的按钮显示的样子就像是放一个文本在那里。

    图(1):

    图(2):
    展开全文
  • 相信很多都遇到了设置布局里面的按钮或textview等其他控件的背景图片的时候,你会抱怨美工给的图片,怎么一运行放到手机上面,就严重变形了,一点都友好一点都专业,但我觉得这完全不是美工的问题,作为程序员总...

    相信很多都遇到了设置布局里面的按钮或textview等其他控件的背景图片的时候,你会抱怨美工给的图片,怎么一运行放到手机上面,就严重变形了,一点都不友好一点都不专业,但我觉得这完全不是美工的问题,作为程序员总有办法解决的,我的解决方案是:

              既然图片放置在控件充当背景会被拉伸,我们就应该想办法让它不要拉伸,让图片里面的图标显示在中间位置,也就是将图片的尺寸(即画布)放大,放到按钮的背景的时候,就不会被拉伸,图标刚好显示在中间。主要是使用ps将画布大小设置的大一点,这个可以自己调调看。步骤如下:

          1.百度一下,在线ps,如下,选择第一个网站:


           2.选择文件,打开本地的图片,如下:



        3.选择图像菜单,选择画布大小,更改画布大小,注意的是要讲图标放在画布中间,如下:



       4.最后一步就是将修改后的图片重新导入到android工程里的drawable文件夹内,重新运行程序,你会发现图片显示的非常正常,很好看,这样可以很好的解决图片拉伸的问题。(当然我这里的图片有一个前提是背景是透明的)

    展开全文
  • 瀑布流布局其原理

    2020-06-13 20:21:44
    要做到每一张图片都根据上面的高度自动适应排列,那么我们就能单纯地靠html+css布局了,需要用到js来帮助计算位置。 首先,我们需要理清一个思路,就是这个布局一列列来看的,如下图: 我们要做的,其实就是...
  • 9、当来源图片尺寸和输出尺寸比率不同时,图片会进行自动的裁剪以保持输出图片不存在画面扭曲的现象,在目前版本里,软件提供了裁剪位置的设置,以便用户能够大致进行裁剪定位,对于这一点,未来版本排除提供更...
  • 大概分为以下几个步骤:在xml布局里面按照设计稿的尺寸位置写一个Textview按照设计稿规定的颜色和圆角在drawable目录下创建一个shape文件将这个shape文件作为Textview的背景这样一个很标准的按钮就诞生了,然后就...
  • 下边的图其实我放了一张很大的图,但是都会比例缩放到这个位置,怎么才能更改默认图片的长宽?和位置? ![图片说明](https://img-ask.csdn.net/upload/201912/25/1577260847_818926.png) ``` <!...
  • 反正这些他不管,就是要下滑退出,再缩回上一层界面小图片位置。 找了不少DEMO,基本都是只满足图片,视频实现这个功能, 那就自己来 SmartTouchLayout 支持多手势识别的布局: 双指、双击缩放;单指滑动;...
  • 在DIV CSS布局中对于图片列表或图片排版时,图片不是固定宽度高度大小,但图片占位是固定宽度高度,这个时候如果使用CSS固定死图片大小(宽度 高度),这个时候如果图片相对于这个位置不是等比例大小,那么这张图片...
  • QT设置右下角悬浮按钮

    千次阅读 2019-11-25 23:19:25
    最重要的点是,按钮能破坏之前的界面布局。 思路其实也比较简单,之前也有做过焦点移到到按钮显示提示图片,移出按钮则提示消失的问题,大致思路是一致的,主要方法是采取位置的偏移以达到显示的效果。具体代码...
  • 看到百威啤酒的客户端主界面的按钮,感觉比较新奇,先看下图片:注意图中我画的箭头,当时鼠标点击的黑色圈圈的位置,然后按钮出现了下的效果(×××的描边)刚开始看到这种效果很是好奇,知道是怎么实现的,后来...
  • Android中focusable属性的妙用——底层...刚开始看到这种效果很是好奇,知道是怎么实现的,后来仔细一想,应该是整个啤酒罐是一张图片(ImageView),该图片布局在三个按钮之上,然后就是最关键的地方,把图片
  • 在DIV CSS布局中对于图片列表或图片排版时,图片不是固定宽度高度大小,但图片占位是固定宽度高度,这个时候如果使用CSS固定死图片大小(宽度 高度),这个时候如果图片相对于这个位置不是等比例大小,那么这张图片...
  •  在Android中使用focusable 属性来实现按钮的特效,...刚开始看到这种效果很是好奇,知道是怎么实现的,后来仔细一想,应该是整个啤酒罐是一张图片(ImageView),该图片布局在三个按钮之上,然后就是最关键的
  • PopupWindow 显示位置 大小的设置

    万次阅读 2015-04-15 16:39:59
    但是一般情况下popupWindpw会显示紧挨着被点击的按钮的下面,而不是如图所示的那样,这里就需要设置PopupWindow的显示位置了 private void showPopupWindow(View view){ //一个自定义的布局作为显示的内容 View ...
  • 如题我要显示一张图片右下角添加一个按钮,此时可以设置与图片的... 在手机分辨率超过是没有问题的能显示在手机右下角,但是一旦宽高足以放下图片就会被自适应缩小图片,但是按钮的位置就不对了,该如何是好呢?
  • 1、setStyleSheet()和setStyle(): ...除此之外,找一整张这样的图片,或者设置padding属性调整图标位置和大小也可以。paintEvent使用方法之前写过。 3、qml 4、init 5、自定义插件: 在Qt中创建控件项目
  • 为后期方便,引导页下方的小圆点就布局文件中固定死了,而是通过在代码中给出的图片数组的长度,去动态的画出相应的圆点数(假设是灰色) 要实现随手指移动,前提需要在原来的灰色小圆点上面在布局一个颜色不同...
  •  简单的布局,视窗中我能见到的只有一张照片和左右两个按钮还有下面两个按钮,视窗的大小就是单张图片的大小,几个按钮用position定位的方式将其定位到想要的位置了,那么四副图片的直接父元素的宽度是多少呢,那...
  • 我有一个源代码,是只有数字的,然后我加入了调用图片并且修改了一点代码后 知道为什么点击重列就有问题了。reload函数那里是不是缺了什么,拜托各位大神帮我解决一下了~~~小女子谢过~ 下面是我的代码: ...
  • 【自由列表框模块】懂自绘易友的福音,使用简单,可响应式布局,可单列多列,并且可自行扩展组件 模块基于复制组件的方式生成列表,源码内已内置添加了按钮、编辑框、标签、超级按钮、超级编辑框、超级列表框、...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 297
精华内容 118
关键字:

图片布局位置按不了