2011-03-11 5 views
3

Я пытаюсь сделать термометр. Для этого у меня есть изображение термометра (файл png), который я вставил в макет с помощью ImageView. Теперь я хочу нарисовать линию над этим изображением, чтобы показать эффект чтения температуры.Как нарисовать динамический чертеж над макетом

Вот мой код.

main.xml

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<ImageView 
</ImageView> 
<com.focusone.Android.DrawExample.CustomDrawableView  
    android:id="@+id/custom_drawable_view" 
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content" 
    height='100' 
    /> 
</AbsoluteLayout> 

DrawExample.java

package com.focusone.Android.DrawExample; 

public class DrawExample extends Activity { 
    /** Called when the activity is first created. */ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

    } 

} 

CustomDrawableView.java

public class CustomDrawableView extends View { 
    private ShapeDrawable mDrawable; 

    public CustomDrawableView(Context v,AttributeSet as){ 
     super(v,as); 
     drawShape(as); 
    } 
    public void drawShape(AttributeSet ast) { 

     int x =45; int y=15 ; int width=5; int height=0 ; 
        height= Integer.parseInt(ast.getAttributeValue(null, "height")); 
        mDrawable = new ShapeDrawable(new RectShape()); 
        mDrawable.getPaint().setColor(0xff74AC23); 
        mDrawable.setBounds(x, y, x + width, y + height); 
    } 
    protected void onDraw(Canvas canvas) { 
     mDrawable.draw(canvas); 
    } 
} 

Теперь я могу нарисовать линию на верхней части термометра изображения с помощью эта программа.

Но как изменить высоту линии во время выполнения. Так как height = 100 записано в XML-файле, я не знаю, как его изменить.

Пожалуйста, помогите мне.

+0

Кстати .. почему вы просто не расширили класс ImageView? Тогда вам не придется заботиться о рисовании изображения. Вы можете сосредоточиться на рисовании своей фигуры. – Chris

+0

Я бы попробовал FrameLayout. Первое изображение, а затем пользовательский вид сверху, поскольку AbsoluteLayout устарел. Чтобы поместить термометр в любом месте экрана, вы можете вставить этот FrameLayout в RelativeLayout, установив его верхнее и левое поле. – Lumis

ответ

1

Сначала я думаю, что вам не нужно, чтобы передать атрибуты в drawShape (AttributeSet AST), но только высоту в конструкторе CustomDrawableView(). Тогда, как Крис сказал, что вы должны иметь другой метод в настраиваемое представление, как

public void setTemperature(int tmp){ 
    drawShape(tmp); 
    invalidate(); //this will call onDraw() 
} 

В вашей основной деятельности сделать ссылку на пользовательской точки зрения, так что вы можете вызвать его публичные методы

CustomDrawableView temperatureView = 
        (CustomDrawableView) findViewById(R.id.custom_drawable_view); 

    temperatureView.setTemperature(50); 
+0

Почему даже статичность 'setTemperature' статична? На мой взгляд, это не имеет смысла. Конечно, можно рассуждать, что вы только когда-либо рисуете одну температуру. Но посмел бы, если бы ты хотел еще нарисовать температуру. Переменная 'instance' тоже стала бы ненужной ... – Atmocreations

+0

Вы правы, здесь не нужно соединять статические методы. – Lumis

1

Вы можете:

  • Make «высота» член вашей CustomDrawableView
  • Затем создайте метод setHeight(int height) в котором можно изменить значение высоты.
  • Затем в вашей деятельности используйте (CustomDrawableView)findViewById(R.id.custom_drawable_view), чтобы получить ссылку на ваш объект viewObject.
  • Затем измените значение, как вам нравится с заходом setHeight(x)

надежду, что помогает

Смежные вопросы