Picture linkAndroid Bar personnalisé: dessiner sur la barre d'état
Question:
Quand je utilisateur mon avis personnalisé dans le activity.and alors je change TranslationY de la coutume view.And Ensuite, la vue personnalisée dessine sur la barre d'état.
Lorsque je supprime le code, canvas.clipRect(0, 0, getWidth(), getHeight(), Region.Op.REPLACE);
dans CustomView.java, il est sera ok.
Mais dans la situation réelle, j'ai besoin de la fonction clipRect pour limiter. Alors, comment puis-je calculer la gamme de clips.
Aidez-moi à résoudre le problème.
fichier Mise en page:
<RelativeLayout
android:id="@+id/action_bar"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#00e0e0">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Test Title" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:text="up"
android:textSize="32dp" />
</RelativeLayout>
<cn.bangnijiao.testunitdemo.CustomView
android:id="@+id/counterView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/action_bar"
android:layout_centerHorizontal="true" />
code:
public class YActivity extends Activity {
TextView up;
CustomView customView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_y);
up = (TextView) findViewById(R.id.text);
customView = (CustomView) findViewById(R.id.counterView);
up.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
customView.setTranslationY(customView.getTranslationY() - 20);
}
});
findViewById(R.id.action_bar).bringToFront();
}
}
code CustomView:
public class CustomView extends View {
private Paint mPaint;
int size = 120;
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
drawSeparatorsAndBackground(canvas);
}
private void drawSeparatorsAndBackground(Canvas canvas) {
mPaint.setColor(Color.YELLOW);
canvas.drawRect(0, 0, getWidth(), getHeight(), mPaint);
canvas.clipRect(0, 0, getWidth(), getHeight(), Region.Op.REPLACE);
mPaint.setColor(Color.BLACK);
int verticalCount = (getWidth()/size);
float[] verticalLines = new float[verticalCount * 4];
for (int i = 0; i < verticalCount; i++) {
verticalLines[i * 4 + 0] = i * size;
verticalLines[i * 4 + 1] = 0;
verticalLines[i * 4 + 2] = i * size;
verticalLines[i * 4 + 3] = getHeight();
}
canvas.drawLines(verticalLines, mPaint);
int hourHorizontalCount = (getHeight()/size);
float[] hourHorizontalLines = new float[hourHorizontalCount * 4];
for (int i = 0; i < hourHorizontalCount; i++) {
hourHorizontalLines[i * 4 + 0] = 0;
hourHorizontalLines[i * 4 + 1] = i * size;
hourHorizontalLines[i * 4 + 2] = getWidth();
hourHorizontalLines[i * 4 + 3] = i * size;
}
canvas.drawLines(hourHorizontalLines, mPaint);
}
}
Merci, mais aucun effet – Kevinsu917
@ Kevinsu917 Je vous lance le code pas tirer sur la barre d'état, peut-être votre les styles ont- true
et ActionBar set fitSystemWindows = true? –
AlphaBoom
arriver juste sur un téléphone. Comme Samsung Galaxy S6-5.1.0-API 22. Vous pouvez essayer par le simulateur Genymotion. – Kevinsu917