在 android 中滚动时更改按钮的背景图像
Change Background Image of button when scrolling in android
抱歉没有发布任何代码。
在 Whosebug 和 google 上搜索但找不到合适的解决方案,如果您对此有任何想法或技巧,请帮帮我。
要求:
我有许多按钮是根据网络以编程方式创建的 requirement.and 将所有按钮的背景图像设置为灰度。我已经完成了这部分但是当滚动水平 scollview 然后我想改变那个按钮(滚动时可见)背景图像彩色(初始加载灰度)和特定时间让我们假设 10 秒按钮背景设置初始状态(灰度) .
主旋律:
Change button background image when scolling on visiable view's
button. for cetain time interval(10 second).
`
问题:
我无法获得当前在水平视图中可见的按钮,也无法更改该按钮的背景彩色图像(第一次查看加载)。我只想以编程方式进行此操作,因为所有图像都来自服务器端。
任何想法,如何完成这项工作或这项任务的任何参考资料。
注:
我创建 button
视图并设置图像背景并在 linearlayout
上添加图像并添加该线性布局其他 mainlinearlayout
并在 horizontalview
布局上添加主线性布局。
我的代码示例:
public class CustomAdWithTitle extends LinearLayout{
private LinearLayout LinearCollectionAds;
private List<CommericalClassifiedAds> listCommericalAds;
HorizontalScrollView commercialH = new HorizontalScrollView(mcontext);
commercialH.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
LinearLayout commercialL = new LinearLayout(mcontext);
commercialL.setOrientation(LinearLayout.HORIZONTAL);
commercialL.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
LinearLayout LinearCollectionAds= new LinearLayout(mcontext);
LinearCollectionAds.setOrientation(LinearLayout.VERTICAL);
LinearCollectionAds.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
for (int i = 0; i < listCommericalAds.size(); i++) {
try {
commercialL.addView(listCommericalAds.get(i));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
commercialH.addView(commercialL);
LinearCollectionAds.addView(commercialH);
this.addView(LinearCollectionAds);
}
.......
CommericalClassifiedAds 列表它可以 return 带有按钮视图的相对布局。我只添加按钮背景,并在第一次加载视图时设置灰度。
public class CommericalClassifiedAds extends RelativeLayout {
}
让我们看看我是否猜对了。要更改按钮后面的图像,您可以使用 StateListDrawable
StateListDrawable stateList = new StateListDrawable();
stateList.addState(new int[] { android.R.attr.state_selected }, bitmapFromServer);
stateList.addState(new int[] {}, bitmapGrayScale);
创建时将其添加到每个 CommericalClassifiedAds 背景,而不是按钮背景。 Register a Scroll listener 到 commercialH 并在其中更新 UI。
private static boolean wait;
private static Handler handler = new Handler();
private static Runnable delayRunnable = new Runnable() {
@Override
public void run() {
int childcount = commercialL.getChildCount();
for (int i=0; i < childcount; i++){
commercialL.getChildAt(i).setSelected(false);
}
};
@Override
public void onScrollChanged() {
//this method can be called very frequently so only run selective
if (!wait) {
handler.removeCallbacks(delayRunnable);
wait = true;
int childcount = commercialL.getChildCount();
for (int i=0; i < childcount; i++){
commercialL.getChildAt(i).setSelected(true);
}
handler.postDelayed(new Runnable() {
@Override
public void run() {
wait = false;
}
}, 2000);
handler.postDelayed(delayRunnable, 10000);
}
}
如果运行缓慢我会首先重新考虑布局结构。看起来你的布局比要求的要多,然后优化 onScroll。
我保留错误,它没有经过测试,但它可以让您了解如何解决您的问题。
抱歉没有发布任何代码。 在 Whosebug 和 google 上搜索但找不到合适的解决方案,如果您对此有任何想法或技巧,请帮帮我。
要求:
我有许多按钮是根据网络以编程方式创建的 requirement.and 将所有按钮的背景图像设置为灰度。我已经完成了这部分但是当滚动水平 scollview 然后我想改变那个按钮(滚动时可见)背景图像彩色(初始加载灰度)和特定时间让我们假设 10 秒按钮背景设置初始状态(灰度) .
主旋律:
Change button background image when scolling on visiable view's button. for cetain time interval(10 second).
`
问题:
我无法获得当前在水平视图中可见的按钮,也无法更改该按钮的背景彩色图像(第一次查看加载)。我只想以编程方式进行此操作,因为所有图像都来自服务器端。
任何想法,如何完成这项工作或这项任务的任何参考资料。
注:
我创建 button
视图并设置图像背景并在 linearlayout
上添加图像并添加该线性布局其他 mainlinearlayout
并在 horizontalview
布局上添加主线性布局。
我的代码示例:
public class CustomAdWithTitle extends LinearLayout{
private LinearLayout LinearCollectionAds;
private List<CommericalClassifiedAds> listCommericalAds;
HorizontalScrollView commercialH = new HorizontalScrollView(mcontext);
commercialH.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
LinearLayout commercialL = new LinearLayout(mcontext);
commercialL.setOrientation(LinearLayout.HORIZONTAL);
commercialL.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
LinearLayout LinearCollectionAds= new LinearLayout(mcontext);
LinearCollectionAds.setOrientation(LinearLayout.VERTICAL);
LinearCollectionAds.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
for (int i = 0; i < listCommericalAds.size(); i++) {
try {
commercialL.addView(listCommericalAds.get(i));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
commercialH.addView(commercialL);
LinearCollectionAds.addView(commercialH);
this.addView(LinearCollectionAds);
}
.......
CommericalClassifiedAds 列表它可以 return 带有按钮视图的相对布局。我只添加按钮背景,并在第一次加载视图时设置灰度。
public class CommericalClassifiedAds extends RelativeLayout {
}
让我们看看我是否猜对了。要更改按钮后面的图像,您可以使用 StateListDrawable
StateListDrawable stateList = new StateListDrawable();
stateList.addState(new int[] { android.R.attr.state_selected }, bitmapFromServer);
stateList.addState(new int[] {}, bitmapGrayScale);
创建时将其添加到每个 CommericalClassifiedAds 背景,而不是按钮背景。 Register a Scroll listener 到 commercialH 并在其中更新 UI。
private static boolean wait;
private static Handler handler = new Handler();
private static Runnable delayRunnable = new Runnable() {
@Override
public void run() {
int childcount = commercialL.getChildCount();
for (int i=0; i < childcount; i++){
commercialL.getChildAt(i).setSelected(false);
}
};
@Override
public void onScrollChanged() {
//this method can be called very frequently so only run selective
if (!wait) {
handler.removeCallbacks(delayRunnable);
wait = true;
int childcount = commercialL.getChildCount();
for (int i=0; i < childcount; i++){
commercialL.getChildAt(i).setSelected(true);
}
handler.postDelayed(new Runnable() {
@Override
public void run() {
wait = false;
}
}, 2000);
handler.postDelayed(delayRunnable, 10000);
}
}
如果运行缓慢我会首先重新考虑布局结构。看起来你的布局比要求的要多,然后优化 onScroll。
我保留错误,它没有经过测试,但它可以让您了解如何解决您的问题。