我正在扩展 root布局,因此我可以在其上drawBitmap
个4个箭头,屏幕的每个角落都有一个箭头。这些箭头会偶尔同时闪烁。
我正在做这个优化,以避免创建4个额外的视图,所以我想只有区域被独立无效才有意义,因为如果整个布局无效&重新绘制后,性能损失可能会比节省更多,因为根布局包含很多东西。我想这是一个好主意,但如果有人认为不是,请告诉我原因。
我试图在每个rect的同一个函数中调用invalidate(Rect):
public MyRootViewGroup extends FrameLayout {
@Override
public void draw (Canvas c) {
super.draw(c); // Draw Viewgroup Children
draw_arrows(); // Paint Arrows over children
invalidate(rect_arrow_left);
invalidate(rect_arrow_right);
invalidate(rect_arrow_bottom);
invalidate(rect_arrow_top);
}
...但不幸的是,似乎只有一个地区因此方法无效。我需要使整个布局无效以使其工作。
问题如果此FrameLayout包含其他子项(在super.draw()
中绘制)但它们没有更改,我对invalidate()
的调用是否会导致它们全部重新绘制?或者Android在某种程度上很聪明地检测到只有箭头区域发生了变化,尽管触发了一个完整的invalidate
?我是在优化和保存4个视图,还是我打破了Android优化管道?
问候!
答案 0 :(得分:0)
在下一个Activity onCreate()方法中使用此代码
ImageView imageView1 = (ImageView)findViewById(R.id.imageView1);
ImageView imageView2 = (ImageView)findViewById(R.id.imageView2);
ImageView imageView3 = (ImageView)findViewById(R.id.imageView3);
ImageView imageView4 = (ImageView)findViewById(R.id.imageView4);
Animation animBlank = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.blank);
imageView1.startAnimation(animBlank);
imageView2.startAnimation(animBlank);
imageView3.startAnimation(animBlank);
imageView4.startAnimation(animBlank);
创建一个xml文件,用于定义要执行的动画类型。该文件应位于res目录下的anim文件夹下(res⇒anim⇒blashc.xml)。如果res目录中没有anim文件夹,请创建一个。
将以下代码放在blink.xml文件中
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha android:fromAlpha="0.0"
android:toAlpha="1.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:duration="600"
android:repeatMode="reverse"
android:repeatCount="infinite"/>
</set>