许多与拇指剪裁有关的stackoverflow问题都与左右剪裁有关,这与我的问题无关。
Thumb是一张图片。图像比例重置onProgressChanged,以便在SeekBar向右滑动时向上扩展。
问题在于,当图像变得足够高以触及SeekBar视图的顶部时,图像会继续缩放,同时保持顶部接触顶部。所以在视觉上看起来像拇指图像在页面上移动。
期望的是(1)当图像向右滑动时图像保持在条的中心。 (2)将拇指图像绘制在所有内容的顶部,而不是在SeekBar视图中剪切。
我尝试过使用SeekBar视图的bringToFront(),但它没有改变任何东西。
代码:
SeekBar.OnSeekBarChangeListener sbcl = new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekbar, int i, boolean b) {
Resources res = getResources();
int resID = (Integer)seekbar.getTag();
// Log.i("R vals in Listener :"," "+resID);
Drawable thumb = res.getDrawable(resID);
double h = (double)thumb.getIntrinsicHeight();
double w = (double)thumb.getIntrinsicWidth();
double di = (double)i;
h = h * 0.2; //scale for icons that are way to big
w = w * 0.2;
Log.i("seek 2"," h: "+h+" w: "+ w);
w = w * (di/200 + 0.5);
h = h * (di/200 + 0.5);
Log.i("seek 3"," h: "+h+" w: "+ w +" i: "+ i);
if (w<1) {w = 1;} if (h<1) {h = 1;}
Bitmap bmpOrg = ((BitmapDrawable)thumb).getBitmap();
Bitmap bmpScaled = Bitmap.createScaledBitmap(bmpOrg, (int)w, (int)h, true);
Drawable newThumb = new BitmapDrawable(res, bmpScaled);
newThumb.setBounds(0, 0, newThumb.getIntrinsicWidth(), newThumb.getIntrinsicHeight());
seekbar.setThumb(newThumb);
}
.xml布局 maxHeight参数(android:maxHeight =“1000dp”)是一种解决方法,可以使图像在SeekBar上保持垂直居中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="sic.emo.apptt.GetProtectorData$PlaceholderFragment">
<sic.eco.appt.VerticalScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="100dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/LabelSA"
android:layout_gravity="center"
android:id="@+id/textLabelSA" />
<SeekBar
android:layout_width="match_parent"
android:layout_height="80dp"
android:id="@+id/seekBarPS"
android:thumb="@drawable/dog"
android:maxHeight="1000dp"
android:hapticFeedbackEnabled="true"
android:layout_gravity="center_horizontal" />
</LinearLayout>
etc. etc.
答案 0 :(得分:0)
(1)没有答案。使用image drawable为拇指,并动态缩放它,当它变大时,它的顶部与SeekBar视图的顶部对齐,所以不知道如何使它与众不同。如果有足够的屏幕空间,填充顶部将为图像增加提供更多空间。
(2)的答案是让元素叠加在一起,使用RelativeLayout来包含所有元素,而不是在LinearLayouts中保存每一行“of stuff”。裁剪来自单独的线性布局中的一行内容。
所以有一个包含所有东西的RelativeLayout,并使用Layout标签来定位所有内容:
android:layout_alignTop="@+id/textLabel1"
android:src="@drawable/ic_action_about"
android:layout_alignParentRight="false"
android:layout_alignParentLeft="true"
android:layout_alignParentEnd="false"
android:paddingLeft="0dp"
android:layout_marginLeft="-10dp"
android:layout_marginTop="-18dp"
在代码中,元素(在本例中为SeekBar,带有拇指图像)可以通过startTrackingTouch中的bringToFront()带到前面
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
seekBar.bringToFront();
}