1

onDraw()にカスタムメソッドを実装しようとしていEditTextます。 onDrawが呼び出されています - ログ メッセージは表示されますが、何も描画されていません。

誰かが私が間違っていることを教えてもらえますか?

これが私のレイアウトからの抜粋です。

    <view xmlns:android="http://schemas.android.com/apk/res/android"
          class ="my.package.NotePadEditView"
            android:inputType="textMultiLine"
            android:id="@+id/edit_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="top"
            android:background="@android:color/transparent"
            android:singleLine="false"
            >
        <requestFocus/>
    </view>
</ScrollView>

クラスは次のとおりです(今のところテストコードのみ):

public class NotePadEditView extends EditText {
Paint paint = new Paint();
public NotePadEditView(Context context, AttributeSet attrs, int defStyle) {
   super(context, attrs, defStyle);
   paint.setStyle(Paint.Style.STROKE);
   paint.setStrokeWidth(3);
   paint.setColor(0xFF0000);
 }
 @Override
 protected void onDraw(Canvas canvas) {
   Log.d("NotePadEditView", "Calling onDraw()"); // These log messages are displaying
   canvas.drawLine(0, 0, 50, 50, paint); // just some random stuff so we know when we are done. (Note: these are not displaying - what's up with that???)
   canvas.drawText("Hello, World", 30, 30, paint);
   super.onDraw(canvas);
  }

// more constructors, etc
4

2 に答える 2

2

わかりました、ついにそれを理解しました。色の割り当てにアルファバイトを設定する必要があるようです:

paint.setColor(0x80FF0000); 

いいえ

paint.setColor(0xFF0000);

どうやらアルファバイトを除外することで、暗黙的にゼロを渡しているようです。これは、色が完全に透明であることを意味します。Java AWT はそのようには機能しません。

于 2012-04-12T11:42:17.523 に答える
2

AndroidレイアウトのxmlでカスタムEditTextを動作させるには、このことを試してみるべきだと思います。

これは私があなたのクラスで行った変更です。

public class NotePadEditView extends EditText{
@Override
protected void onDraw(Canvas canvas) {

    Log.d("NotePadEditView", "Calling onDraw()"); // These log messages are displaying
       canvas.drawLine(0, 0, 50, 50, paint); // just some random stuff so we know when we are done. (Note: these are not displaying - what's up with that???)
       canvas.drawText("Hello, World", 30, 30, paint);
       super.onDraw(canvas);

}
Paint paint;

public NotePadEditView(Context context, AttributeSet attrs){
    super(context, attrs);
    //this Contructure required when you are using this view in xml 
    paint = new Paint();
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(3);
    paint.setColor(Color.BLUE);
}

public NotePadEditView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    paint = new Paint();
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(3);
    paint.setColor(0xFF0000);

   }

}

このようにxmlで使用します。

   <my.package.NotePadEditView 
            android:id="@+id/edit_text"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:gravity="top"
            android:inputType="textMultiLine"
            android:singleLine="false" />

これがあなたの仕事になることを願っています。

于 2012-04-11T05:16:02.600 に答える