1c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio/* 2c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio * Copyright (C) 2011 The Android Open Source Project 3c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio * 4c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio * Licensed under the Apache License, Version 2.0 (the "License"); 5c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio * you may not use this file except in compliance with the License. 6c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio * You may obtain a copy of the License at 7c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio * 8c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio * http://www.apache.org/licenses/LICENSE-2.0 9c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio * 10c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio * Unless required by applicable law or agreed to in writing, software 11c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio * distributed under the License is distributed on an "AS IS" BASIS, 12c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio * See the License for the specific language governing permissions and 14c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio * limitations under the License. 15c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio */ 16c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio 17c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Megliopackage com.android.bidi; 18c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio 19c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglioimport android.content.Context; 20c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglioimport android.content.res.TypedArray; 21c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglioimport android.graphics.Canvas; 22c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglioimport android.graphics.Color; 23c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglioimport android.graphics.Paint.Align; 24c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglioimport android.text.TextPaint; 25c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglioimport android.util.AttributeSet; 26c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglioimport android.view.View; 27c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio 28c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Megliopublic class BiDiTestViewDrawText extends View { 29c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio private float mSize; 30c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio private int mColor; 31c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio private String mText; 32c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio 33c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio public BiDiTestViewDrawText(Context context) { 34c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio this(context, null); 35c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio } 36c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio 37c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio public BiDiTestViewDrawText(Context context, AttributeSet attrs) { 38c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio this(context, attrs, 0); 39c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio } 40c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio 41c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio public BiDiTestViewDrawText(Context context, AttributeSet attrs, int defStyle) { 42c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio super(context, attrs, defStyle); 43c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio 44c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio final TypedArray a = context.obtainStyledAttributes(attrs, 45c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio R.styleable.DrawTextTestView, defStyle, 0); 46c2063a5b18bc2e54f000b411c82f43992a53854eFabrice Di Meglio mSize = a.getDimension(R.styleable.DrawTextTestView_size, 40.0f); 47c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio mColor = a.getColor(R.styleable.DrawTextTestView_color, Color.YELLOW); 48c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio final CharSequence text = a.getText(R.styleable.DrawTextTestView_text); 49c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio mText = (text != null) ? text.toString() : "(empty)"; 50c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio a.recycle(); 51c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio } 52c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio 53c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio @Override 54c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio protected void onDraw(Canvas canvas) { 55c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio super.onDraw(canvas); 56c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio final int width = getWidth(); 57c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio final int height = getHeight(); 58c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio 59c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio final TextPaint paint = new TextPaint(); 60c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio paint.setTextSize(mSize); 61c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio paint.setColor(mColor); 62c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio paint.setTextAlign(Align.CENTER); 63c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio 64c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio canvas.drawText(mText, width / 2, height * 2 / 3, paint); 65c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio } 66c6f247ca31e5d4a9cc9d130cfb0abd5657176303Fabrice Di Meglio}