2 fengwuyu4108 fengwuyu4108 于 2016.09.12 17:39 提问

Android自定义VerticalSeekBar,同样的布局文件,在不同工程中显示结果却不同

找了一个可用的自定义竖直SeekBar,在测试工程中显示正常,结果到了正式工程中却显示不正常,实在是找不到原因

测试项目效果如下:
图片说明
正式项目显示效果:
图片说明
自定义SeekBar代码如下:

 package com.example.listviewtest;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.SeekBar;

public class VerticalSeekBar extends SeekBar {

    public VerticalSeekBar(Context context) {
        super(context);
    }

    public VerticalSeekBar(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

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

    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(h, w, oldh, oldw);
    }

    @Override
    protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(heightMeasureSpec, widthMeasureSpec);
        setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
    }

    protected void onDraw(Canvas c) {
        //将SeekBar转转90度
        c.rotate(-90);
        //将旋转后的视图移动回来
        c.translate(-getHeight(),0);
        Log.i("getHeight()",getHeight()+"");
        super.onDraw(c);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (!isEnabled()) {
            return false;
        }

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_MOVE:
            case MotionEvent.ACTION_UP:
                int i=0;
                //获取滑动的距离
                i=getMax() - (int) (getMax() * event.getY() / getHeight());
                //设置进度
                setProgress(i);
                Log.i("Progress",getProgress()+"");
                //每次拖动SeekBar都会调用
                onSizeChanged(getWidth(), getHeight(), 0, 0);
                Log.i("getWidth()",getWidth()+"");
                Log.i("getHeight()",getHeight()+"");
                break;

            case MotionEvent.ACTION_CANCEL:
                break;
        }
        return true;
    }
}


1个回答

weekendboyxw
weekendboyxw   2016.09.19 14:15

这个跟AndroidManifest.xml里面的application 中theme样式有关系,跟代码没关系

fengwuyu4108
fengwuyu4108 设置了layout_width=“8dp”为固定的值后就解决了,非常感谢你的帮助
接近 2 年之前 回复
fengwuyu4108
fengwuyu4108 我改了theme也不行,问题已经解决了
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于多个布局文件中的view共用一个id的问题的探讨
以前一直以为ming
Android 根据不同的屏幕,加载不同的布局文件 使用refs.xml
Fragment与Activity通信 Activity向Fragment传递数据:在Activity中创建Bundle数据包,并调用Fragment的setArguments(Bundle bundle)方法即可将Bundle数据包传给Fragment. Fragment向Activity传递数据或Activity需要在Fragment运行中实时通信:在Fragment中定义一个内部回调接口,再
使用ListView进行不同布局ItemView的显示
实现的界面效果如下图所示,没有可以进行布局上的调整,所以看起来丑一点。         上图在一个ListView中显示了两种不同的ItemView,主要是使用BaseAdapter中的getItemViewType()方法,以及getViewTypeCount()方法实现的。         下面来说说详细的实现步骤:         1. 跟以前使用自定义adapter时一样
Android布局中相同xml文件不同手机显示的界面可能不一样(如华为、小米手机有差异)
在Android布局中,可能会出现同一XML布局在不同的手机显示不一样的问题。 这时,先别急着修改XML文件,先看看显示异常的手机中“系统设置”-->“显示”-->“字体”大小,是不是非标准的,可能是偏大或者偏小,这才导致显示不同。 如果还是有问题,再调整XML布局中文字或控件的显示大小,最好用Android系统推荐的单位,不要用绝对单位。 在此记录,互相汲取。
玄学!?相同的代码在不同的IDE下运行结果不同。
这是在codeblocks下运行的结果、这是在Devc++运行的结果代码一模一样 , 运行出来的结果不同???怎么解决呢?我换过编译器,也换过codeblocks的版本,但结果都是这样不知道你们的运行结果是哪个?Devc++出的结果才是正确的答案啊、代码我放这里了,有codeblocks的伙伴试试你的结果。本人还测试了在ubuntu下16.01的codeblock运行与dev相同。目前看来是GCC...
error:使用同样的代码,两次执行效果居然不一样。。。
1、直接在两个地方复制
android 不相同分辨率不同尺寸和相同分辨率不同尺寸自适应屏幕解决方法
本人采用的方法比较笨拙,但是简单 根据各个android手机、iPad等的分辨率和尺寸要有多套的布局文件。 不同分辨率不同尺寸的可以在建立多个layout文件  相信大家都会 例如layout-1280x800 、layout-854x480 但是同分辨率不同尺寸的怎么办? 这里layout的命名规则就不同了 具体如下   我是拿三星的GT-I9220 和iPad的Novo7fir
Android:利用Style和include标签来减少布局中的重复代码
XML布局中我们可能会遇到需要重复放置多个相同控件的情况。   好比上图的布局,如果按照常规来做,我们会在布局中放置三个Button,外加两个View作为分界线,其代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.an
一样的sql语句,不一样的结果!
今天用程序写了个增删改查,其他还好,查的时候用到了模糊查询,其中字段包含有中文,尽管sql语句正确,就是查不到东西,后来直接在数据库中去尝试,发现,设置GBK时,sql语句可以查询出来数据,设置成utf8时就查询出空值,所以我就对数据库的字符集相关内容做了查询。以下是转载内容:   MySQL对中文的支持程度还是很有限的,尤其是新手,一旦出现乱码问题,就会头大。下面介绍几种乱码问题的现象原
如何使用Android Studio用相同的代码工程生成不同的APP
今天由于公司业务需要, 经理让安装两个相同的APP到手机上, 考虑到包名是应用程序的唯一标识, 所以在工程列表的app下的build.gradle里, 把applicationId改成了不同的. 然后再使用新的签名文件(也可以使用同一个签名文件)重新打包, 这样打包出来的APK就可以和其它的项目同时运行在手机上了.