2014-02-13 3 views
0

Я рисую холст в своем приложении, но проблема в том, что холст не того же размера, что и на экране. В основном холст покрывает только нижнюю правую часть экрана. Что можно сделать, чтобы он соответствовал экрану.?Как сделать холст подходящим для экрана

Вот снимок экрана, как его появление:

enter image description here

Вот мой код:

public class AnimationView extends View 
{ 

    private Movie mMovie; 
    private long mMovieStart; 
    private static final boolean DECODE_STREAM = true; 
    private static byte[] streamToBytes(InputStream is) { 
     ByteArrayOutputStream os = new ByteArrayOutputStream(1024); 
     byte[] buffer = new byte[1024]; 
     int len; 
     try { 
     while ((len = is.read(buffer)) >= 0) { 
      os.write(buffer, 0, len); 
     } 
     } catch (java.io.IOException e) { 
     } 
     return os.toByteArray(); 
    } 

    public AnimationView(Context context,AttributeSet attrs) 
    { 

     super(context,attrs); 
     setFocusable(true); 
     java.io.InputStream is; 
     is = context.getResources().openRawResource(R.drawable.flag); 
     if (DECODE_STREAM) { 
     mMovie = Movie.decodeStream(is); 
     } else { 
     byte[] array = streamToBytes(is); 
     mMovie = Movie.decodeByteArray(array, 0, array.length); 
     } 
    } 
    @Override 
    public void onDraw(Canvas canvas) { 
    long now = android.os.SystemClock.uptimeMillis(); 
     if (mMovieStart == 0) { // first time 
     mMovieStart = now; 
     } 
     if (mMovie != null) { 
     int dur = mMovie.duration(); 
     if (dur == 0) { 
      dur = 3000; 
     } 
     int relTime = (int) ((now - mMovieStart) % dur); 
     Log.d("", "real time :: " +relTime); 
     mMovie.setTime(relTime); 

     int width = this.getWidth()/2; 
     int height = this.getHeight()/2; 

     mMovie.draw(canvas, width, height); 
     invalidate(); 
     } 


    } 
    } 

Вот XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#074068" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

    <com.androidqa.AnimationView 
     android:id="@+id/View" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:adjustViewBounds="true" 
     android:visibility="gone" 
     android:background="#074068" /> 

</LinearLayout> 
+0

Изменить свой XML на 'андроида: высота = "match_parent"' – Doomsknight

+0

нет .. То не помогает. Он остается таким же. –

+0

Я предполагаю, что ваш холст - это высота экрана. но то, что вы рисуете на холсте, нет. Проверьте свой конструктор макета, он покажет область, в которой она используется. – Doomsknight

ответ

0

Я предполагаю, что Movie является пользовательский класс? Я не могу видеть, что в Movie.draw()

int width = this.getWidth()/2; 
    int height = this.getHeight()/2; 

    mMovie.draw(canvas, width, height); // this method 

Но я вижу, вы компенсируя изображение без причины. Ака, начинающий рисовать в центре. Там, где само изображение не сосредоточено в этой точке.

Внутри вашего метода рисования, где вы рисуете изображение, масштабируйте изображение перед рисованием. И нарисуйте это вместо этого, на происхождение.

bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true); 
canvas.drawBitmap(bitmap, 0, 0, null); 

Но пройти в фактической высоте зрения на ваш метод рисования:

int width = this.getWidth(); 
    int height = this.getHeight(); 
    mMovie.draw(canvas, width, height); 
+0

Фильм не является обычным классом. Вы можете увидеть весь проект [здесь] (http://iamvijayakumar.blogspot.in/2012/06/android-animated-gif-example.html). Теперь как рисовать изображение, которое подходит для холста в этом проекте.? –

+0

@AkshatJaiswal К сожалению, глядя на API, я не вижу возможности масштабировать изображение. Это похоже на ограничение класса Кино. Я могу ошибаться, но у меня нет опыта в этом. – Doomsknight

+0

Хорошо .. Thanx за помощью, хотя .. –

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