27287


画像を複数枚並べて、横スクロールで見れるようにしたいです。  
今、一枚の画像が大きすぎて、一枚しか見えない状態です。なので、画像を小さくしたく、Bitmapというメソットを使い、HorizontalScrollViewのコードを追加したのですが、エラーが出てしまいました。  
Error:Execution failed for task ':app:processDebugResources'.

> com.android.ide.common.process.ProcessException:
> org.gradle.process.internal.ExecException: Process 'command というエラーが出ました。

activity_main.xml では

[code]

    <?xml version="1.0" encoding="utf-8"?>　⬅︎
    
    <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        　　android:layout_width="fill_parent"
        　　android:layout_height="fill_parent"
        　>　⬅︎
    
    <LinearLayout
        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"
        android:orientation="horizontal"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="yurihasuike.teamgirls.MainActivity">
    
        <ImageView
            android:scaleType="centerCrop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/bigfig"
            android:src="@drawable/bigfig" />
    
        <ImageView
            android:scaleType="centerCrop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/feminine"
            android:src="@drawable/feminine" />
    
    
    </LinearLayout>
    </HorizontalScrollView>　⬅︎
    
[/code]

のように記述し⬅︎の部分でエラーが出ました。

MainActivity.javaでは

[code]

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.ImageView;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ImageView imageView1 = (ImageView)findViewById(R.id.feminine);
            ImageView imageView2 = (ImageView)findViewById(R.id.bigfig);
    
            Resources res = getResources();
    
            Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.bigfig);
    
            // bitmapの画像を200×90で作成する
            Bitmap bitmap2 = Bitmap.createScaledBitmap(bitmap, 200, 45, false);
    
            img.setImageBitmap(bitmap2);
    
            Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.feminine);
    
            // bitmapの画像を200×90で作成する
            Bitmap bitmap2 = Bitmap.createScaledBitmap(bitmap, 200, 45, false);
    
            img.setImageBitmap(bitmap2);
    
    
    
    //        imageView2.setImageResource(R.drawable.bigfig);
        }
    
    
        }
    
[/code]

のように記述しました。  
Bitmapの記述の仕方がおかしかったのでしょうか？  
また、画像の大きさを変えるメソットはBitmapであっていますか？


CC BY-SA 3.0
2016-07-02T10:15:37.397
27268
2016-07-03T03:32:26.160
2016-07-02T16:25:55.043
10492
14754
question
android java
横スクロールと画像縮小をしたい


いくつかの質問の複合になっていますが、問題点をひとつに絞ると回答しやすいと思います。

## レイアウトXMLのエラーが出る

> Error:(4) Error parsing XML: not well-formed (invalid token)

というエラーメッセージがでていないでしょうか？

> Error:Execution failed for task ':app:processDebugResources'.  
>  com.android.ide.common.process.ProcessException: Failed to execute aapt

こちらのエラーは、GradleのAndroidプラグインのタスク`:app:processDebugResources`が失敗したことを示すメッセージで、本質的なエラーの内容ではありません。

実際のエラー原因はXMLのパースに失敗していることで、見たところでは全角スペースが入っているためのように思えます。

[code]

    <?xml version="1.0" encoding="utf-8"?>
    <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin">
    
            <ImageView
                android:id="@+id/bigfig"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:scaleType="centerCrop"
                android:src="@drawable/bigfig" />
    
            <ImageView
                android:id="@+id/feminine"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:scaleType="centerCrop"
                android:src="@drawable/feminine" />
        </LinearLayout>
    </HorizontalScrollView>
    
[/code]

ですので、全角スペースを削除すればエラーは消えると思います。

`fill_parent`の記法は古いので`match_parent`を使っています。また、`LinearLayout`の`xmlns:android="http://schemas.android.com/apk/res/android"`のスキーマ宣言は重複しているので、削除しています。

# 画像のサイズを変えたい

`Bitmap`はメソッドではなくクラスになります。

`Bitmap#createScaledBitmap()`でリサイズする方法は間違ってはいないですが、ほとんどの場合、[`ThumbnailUtils`](https://developer.android.com/reference/android/media/ThumbnailUtils.html)を用いた方が簡単に記述できます。

また、[`ImageView`](https://developer.android.com/reference/android/widget/ImageView.html)自体に画像をリサイズして表示する機能がありますので、`ImageView`の横幅と高さを目的のサイズにして、そこへ画像をセットするという方法もあります。スケーリング方法は、`scaleType`で指定できます。

※ただし、元画像が大きすぎる場合にはメモリを逼迫する可能性があるため、`Bitmap`のリサイズと併用する必要もあるでしょう。

# 画像を複数枚並べて、横スクロールで見れるようにしたい

この場合、どのような表示にしたいのかにもよるので一概には言えませんが、`HorizontalScrollView`よりも[`ViewPager`](https://developer.android.com/reference/android/support/v4/view/ViewPager.html)の方が好ましいように思えます。

[code]

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <android.support.v4.view.ViewPager
            android:id="@+id/viewPager"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </LinearLayout>
    
[/code]

* * *
[code]

    import android.os.Bundle;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.ImageView.ScaleType;
    
    import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
    
    public class MainActivity extends AppCompatActivity {
    
        int[] drawables = {
                R.drawable.bigfig,
                R.drawable.feminine
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);
            viewPager.setAdapter(new PagerAdapter() {
    
                @Override
                public ImageView instantiateItem(ViewGroup container, int position) {
                    ImageView imageView = new ImageView(MainActivity.this);
                    imageView.setScaleType(ScaleType.FIT_CENTER);
                    imageView.setImageDrawable(getDrawable(drawables[position]));
                    container.addView(imageView, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
                    return imageView;
                }
    
                @Override
                public void destroyItem(ViewGroup container, int position, Object object) {
                    if (object instanceof ImageView) {
                        ImageView imageView = (ImageView) object;
                        imageView.setImageDrawable(null);
                        container.removeView(imageView);
                    }
                    super.destroyItem(container, position, object);
                }
    
                @Override
                public int getCount() {
                    return drawables.length;
                }
    
                @Override
                public boolean isViewFromObject(View view, Object object) {
                    return view == object;
                }
            });
        }
    }
    
[/code]

`ViewPager`の詳細な使い方については、参考になるリファレンスが多々あると思いますので省略します。


CC BY-SA 3.0
2016-07-03T03:32:26.160
27287
2016-07-03T03:32:26.160
5337
27268
answer