簡體   English   中英

無縮放動畫ImageView寬度

[英]Animate ImageView width without scaling

我正在嘗試為ImageView設置動畫,以便從左到右慢慢顯示。 我在解釋我想要的東西之前問這個問題時,所以這次我使用HTML / JS創建了所需的效果:

http://jsfiddle.net/E2uDE/

在Android中獲得此效果的最佳方法是什么?

我嘗試更改scaleType,然后將ScaleAnimation直接應用於該ImageView:

布局:

<ImageView
    android:id="@+id/graphImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:scaleType="centerCrop"
    android:background="@android:color/transparent"
    android:contentDescription="@string/stroom_grafiek"
    />

Java的:

scale = new ScaleAnimation((float)0,
        (float)1, (float)1, (float)1,
        Animation.RELATIVE_TO_SELF, (float)0,
        Animation.RELATIVE_TO_SELF, (float)1);
scale.setDuration(1000);

graphImage.startAnimation(scale);

但這個stil縮放圖像。

我也嘗試在FrameLayout中包裝ImageView,希望我能為FrameLayout設置動畫:

<FrameLayout
    android:layout_width="70dp"
    android:layout_height="fill_parent"
    android:clipChildren="true"">
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|left|clip_horizontal" />
</FrameLayout>

這仍然會嘗試擴展我的ImageView以適應FrameLayout。

有幾種方法可以做到這一點 - 一種方法是簡單地更改畫布上的剪輯(即允許視圖繪制的區域)繪制圖像的ImageView 緩慢增加繪制邊界的右邊緣將產生與示例鏈接中相同的效果。

我已經編寫了一些示例代碼來說明這種技術。 如果您下載/構建/運行項目,單擊圖像將運行揭示動畫。

看看CoveredImageView類的onDraw方法,它具有以下基本結構:

@Override
protected void onDraw(Canvas canvas) {
    ...
    canvas.getClipBounds(mRect);
    mRect.right = ...;
    canvas.clipRect(mRect);
    ...
    super.onDraw(canvas);
    ...
    invalidate();
}

調整剪輯,然后調用invalidate(),導致再次調用onDraw()。

我還編寫了一些代碼來插入經過時間的正確剪輯值,這不取決於任何特定版本的Android。 但是,作為一個注釋,Android 3.0中有一個新的動畫框架和一個ValueAnimator類可以幫助執行這些任務。

您可以將您的imageview與另一個重疊,例如一個帶有純白色drawable的圖像。 然后,您可以為重疊的imageview設置動畫,而不必擔心比例,直到它的寬度為0並將其刪除。 為此,您必須將imageView放在RelativeLayout ofc中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM