在活动图像之间传递可绘制图像看起来是拉伸的

时间:2014-10-23 22:59:35

标签: android android-layout listview android-intent

我正在构建一个应用程序,其中我有一个带有imageview和textview的列表视图,当我点击列表项时,我想将名称和图像传递给另一个活动。

我已设法做到这一点,但当我在其他活动中传递图像时,图像看起来像拉伸。如何解决这个问题?

我使用Android Asset Studio将我下载的图片制作成各种尺寸。

在列表视图中,图像看起来很好,但在另一个活动中,图像看起来很拉伸。

这是我的代码:

ListView lv = (ListView) findViewById(R.id.listView);
        ArrayAdapter<ListaAdapterNext> adapter = new MySpecialAdapter();
        lv.setAdapter(adapter);
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(NextActivity.this, ListItemActivity.class);
                intent.putExtra("name", skonakia.get(position).getItemNextName().toString());
                intent.putExtra("icon", skonakia.get(position).getImageNextId());
                intent.putExtra("usage", skonakia.get(position).getItemUsage());
                intent.putExtra("description", skonakia.get(position).getItemDescription());
                startActivity(intent);
            }
        });

这里我将drawable id发送到另一个活动

这是我收到它们的方式:

        TextView tv = (TextView)findViewById(R.id.description);
        TextView usage = (TextView)findViewById(R.id.usage);
        String fetchedText = getIntent().getStringExtra("name");
        String fetchedDescription = getIntent().getStringExtra("description");
        String fetchedUsage = getIntent().getStringExtra("usage");
        ImageView iv = (ImageView)findViewById(R.id.imageViewListItem);
        Drawable image = getResources().getDrawable(getIntent().getIntExtra("icon", -1));
        iv.setImageDrawable(image);
        tv.setText(fetchedDescription);
        usage.setText(fetchedUsage);
        getActionBar().setTitle(fetchedText);

以下是我用于listview的2个布局,以及当有人点击listitem时的其他活动

ListView布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Medium Text"
        android:id="@+id/textViewListItem"
        android:layout_marginTop="15dp"
        android:layout_marginLeft="10dp"
        android:layout_gravity="center_horizontal" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="-40dp"
        android:id="@+id/imageView"
        android:src="@drawable/ic_app" />
</LinearLayout>

ListItemClicked布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.kostas.myapplication.ListItemActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:weightSum="1">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:id="@+id/imageViewListItem"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:src="@drawable/ic_launcher" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/description"
            android:id="@+id/textView" />

        <TextView
            android:id="@+id/description"
            android:text="@string/hello_world"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="30dp" />

        <View
            android:id="@+id/view1"
            android:layout_width="fill_parent"
            android:layout_height="2dip"
            android:layout_marginTop="20dp"
            android:layout_alignParentLeft="true"
            android:background="#000" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/usage"
            android:id="@+id/textView2"
            android:layout_marginTop="20dp"
            android:layout_marginBottom="-15dp" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/usage"
            android:layout_marginTop="25dp" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/buy"
            android:id="@+id/buyButton"
            android:layout_marginTop="50dp" />


    </LinearLayout>
    </ScrollView>

</RelativeLayout>

2 个答案:

答案 0 :(得分:2)

  

注意:在JELLY_BEAN之前,此功能无法正确检索   这里传递的资源ID的最终配置密度是   另一个Drawable资源的别名。这意味着如果密度   别名资源的配置与实际不同   资源,返回的Drawable的密度不正确,   导致缩放不良。要解决这个问题,您可以改为   通过TypedArray.getDrawable检索Drawable。使用   Context.obtainStyledAttributes包含一个包含资源的数组   创建TypedArray的感兴趣的ID。

getDrawable(int id)

这可能是你的问题吗?

答案 1 :(得分:2)

为什么不将drawable转换为bytearray将bytearray传递给intent并通过put然后得到你的drawable