Android打开图像onclick像Whatsapp Profile Picture

时间:2015-08-20 14:12:20

标签: android animation imageview fragment toolbar

我有一个带有ImageView的折叠工具栏,当点击图像时,我想用动画放大它,然后去另一个"活动"像whatsapp,电报和许多其他应用程序,允许用户点击朋友的个人资料照片。

这将允许用户在屏幕中央看到图像并保存或共享图片。

我看了一下缩放视图http://developer.android.com/training/animation/zoom.html,但它不够,我在动画期间滞后了。 (我使用了相同的代码)

2 个答案:

答案 0 :(得分:12)

我认为你的关键是共享元素转换。您可以按照tutorial

进行操作

为处于不同活动中的两个视图指定相同的转换名称。 android:transitionName="@string/transition_string"

添加此捆绑包,开始缩放活动

Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(context, view, view.getTransitionName()).toBundle();
            startActivity(intent,bundle);

不要忘记将此行添加到您的活动风格

<!-- Add this line -->
    <item name="android:windowContentTransitions">true</item>

答案 1 :(得分:8)

您可能需要查看有关缩放视图here

的Google文档

基本上他们告诉你的方法是创建一个显示较小图像的图像按钮,单击时将播放动画,最后显示带有全尺寸图像的图像视图。

他们给出的布局如下:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="16dp">

        <ImageButton
            android:id="@+id/thumb_button_1"
            android:layout_width="100dp"
            android:layout_height="75dp"
            android:layout_marginRight="1dp"
            android:src="@drawable/thumb1"
            android:scaleType="centerCrop"
            android:contentDescription="@string/description_image_1" />

    </LinearLayout>

    <!-- This initially-hidden ImageView will hold the expanded/zoomed version of
         the images above. Without transformations applied, it takes up the entire
         screen. To achieve the "zoom" animation, this view's bounds are animated
         from the bounds of the thumbnail button above, to its final laid-out
         bounds.
         -->

    <ImageView
        android:id="@+id/expanded_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="invisible"
        android:contentDescription="@string/description_zoom_touch_close" /></FrameLayout>

然后你可以像这样设置动画:

public class ZoomActivity extends FragmentActivity {
// Hold a reference to the current animator,
// so that it can be canceled mid-way.
private Animator mCurrentAnimator;

// The system "short" animation time duration, in milliseconds. This
// duration is ideal for subtle animations or animations that occur
// very frequently.
private int mShortAnimationDuration;

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

    // Hook up clicks on the thumbnail views.

    final View thumb1View = findViewById(R.id.thumb_button_1);
    thumb1View.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            zoomImageFromThumb(thumb1View, R.drawable.image1);
        }
    });

    // Retrieve and cache the system's default "short" animation time.
    mShortAnimationDuration = getResources().getInteger(
            android.R.integer.config_shortAnimTime);
}}

还有几个步骤,但在这一点上,我实际上是从他们的文档中复制和粘贴。你真的应该去读它。如果您有任何问题,请告诉我们!