Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:SeekBar小部件中的自定义绘图功能正在绘制别名图像_Java_Android_Widget_Seekbar - Fatal编程技术网

Java Android:SeekBar小部件中的自定义绘图功能正在绘制别名图像

Java Android:SeekBar小部件中的自定义绘图功能正在绘制别名图像,java,android,widget,seekbar,Java,Android,Widget,Seekbar,问题是,当我在SeekBar小部件中使用自定义progressDrawable时(可能不正确),它会以非常别名/难看/低质量的形式呈现。我已将“drawingCacheQuality”设置为高,并且没有差异。有人有什么想法吗 我正在开发NexusOne(OS2.2.1),项目的目标构建为API1.5(尽管我希望这不重要) 以下是它的外观示例: 我的目标是创建一个具有两种状态(打开和关闭)的简单漂亮的视觉开关,以及一个在它们之间移动的滑块。我真的没有看到一个更好的小部件,实际上所有的事情都是用S

问题是,当我在SeekBar小部件中使用自定义progressDrawable时(可能不正确),它会以非常别名/难看/低质量的形式呈现。我已将“drawingCacheQuality”设置为高,并且没有差异。有人有什么想法吗

我正在开发NexusOne(OS2.2.1),项目的目标构建为API1.5(尽管我希望这不重要)

以下是它的外观示例:

我的目标是创建一个具有两种状态(打开和关闭)的简单漂亮的视觉开关,以及一个在它们之间移动的滑块。我真的没有看到一个更好的小部件,实际上所有的事情都是用SeekBar为我完成的。如果有人有更好的主意,不需要重写大量的锅炉板代码,那就太好了。看起来这真的应该是可行的,只需付出最小的努力,以某种方式使用或扩展SeekBar。但是我有点不知道从哪里开始

我猜一个想法是将我的开/关图像叠加到ShapeDrawable上,并将其用作背景(progressDrawable使用“@android:color/transparent”),但我不太熟悉如何做到这一点

新活动的基本代码

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        seek = (SeekBar)findViewById(R.id.seek);
        seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
            }
            public void onStartTrackingTouch(SeekBar seekBar) { 
            }
            public void onStopTrackingTouch(SeekBar seekBar) {
                if (seek.getProgress() < seek.getMax() / 2.0)
                    seek.setProgress(0);
                else
                    seek.setProgress(seek.getMax());
            }
        });
    }
@覆盖
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
seek=(SeekBar)findViewById(R.id.seek);
seek.setonseekbarchaneglistener(新SeekBar.onseekbarchaneglistener(){
public void onProgressChanged(SeekBar-SeekBar、int-progress、boolean-fromTouch){
}
开始跟踪触摸时的公共无效(SeekBar SeekBar){
}
TopTrackingTouch(SeekBar SeekBar)上的公共无效{
if(seek.getProgress()
定义SeekBar的main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF">
    <SeekBar android:id="@+id/seek"
                android:layout_alignParentTop="true" 
                android:layout_centerHorizontal="true"
                android:layout_height="wrap_content" android:layout_width="200dip" 
                android:background="@drawable/background"
                android:padding="4dip" 
                android:drawingCacheQuality="high" 
                android:progressDrawable="@drawable/slider_on_off"  
                android:progress="99" android:max="99" 
                android:maxHeight="100dip"
                android:thumb="@drawable/slider_box"
                android:thumbOffset="0dip"
                />
</RelativeLayout>

seekbar的background.xml背景

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" 
    android:useLevel="false" >
    <corners 
        android:radius="4dip" />
    <solid
        android:color="#FF282828" />
</shape>


图形缓存质量与您尝试执行的操作无关。确保将图像放在res/drawable hdpi文件夹中。

嗯,这篇文章很旧,但有一种方法可以通过切换按钮来完成

本页对其进行了详细描述:


如果有人想做这样的事情,请看一看。

好吧,感谢你尝试新的东西。然而,我会重新考虑你的尝试是否合适。这意味着,对于两个州来说,为什么是seekbar?为什么不选择两个按钮、单选按钮或复选框呢。这些似乎都是更为用户友好的选项……更不用说节省时间了:)唯一的原因是比简单的单选按钮更具视觉吸引力。滑动东西总是很有趣…在我看来:)。当我试着做一个像我最喜欢的UISwitch一样的开关按钮时,我偶然发现了同样的东西!我在尝试设置SeekBar图像时仍然遇到一些初期问题。当我链接到API 4而不是API 3时,这个问题就神奇地消失了。如果这对你不起作用,你可以按照Romain Guy的建议尝试,并根据你的屏幕密度添加替代的绘图功能。嗨,Nicholi,你能分享背景、slider\u on\u off和slider\u box绘图功能吗?尝试过了,但没有任何区别。我不太确定你在说什么,因为它和drawable中的图像是一样的。然后我阅读了多屏幕支持,忘记了密度限定符直到API 4(1.6)才被支持。玩了更多的游戏,发现在不将图像放入可绘制hdpi和更改目标SDK的情况下,它显示的很好。猜猜一些很奇怪的虫子?谢谢你的帮助!这使我走上了正确的道路。附言:关于到底是什么使图像“高密度”或“不高密度”有什么建议吗?高密度资源文件夹的概念是,具有高密度显示器的设备将在那里查找高分辨率版本的图像。如果没有找到,则拍摄中等分辨率或低分辨率图像,并将其缩放到适当的大小——这当然会导致“非常锯齿/丑陋/低质量”的图像。