質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

3204閲覧

【Android】カスタムビューにスクロール機能をつけたい

panasonicsite

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/06/23 14:18

画像を端末内から取得し、写真一覧を表示する画面を作成しているのですが、スクロールを行うことが出来ません。

下記のl.addView(new MyView(this, test));を実行してもMyViewのonDrawが実行されないので何も表示されません。
ScrollViewを使用せずに表示を試みると正常に動作します。
原因が全く分からず、二日間ずっと悩んでます...。
皆さんの回答をお待ちしています。
どうかよろしくお願い致します。

Java

1public class Tab3Activity extends Activity{ 2 @Override 3 public void onCreate(Bundle savedInstanceState){ 4 super.onCreate(savedInstanceState); 5 6 LinearLayout l = new LinearLayout(this); 7 l.setOrientation(LinearLayout.VERTICAL); 8 9 ScrollView sv = new ScrollView(this); 10 setContentView(sv); 11 sv.addView(l); 12 13 14 Cursor cursor = getContentResolver().query( 15 MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 16 null, 17 null, 18 null, 19 null 20 ); 21 cursor.moveToFirst(); 22 23 int cnt = 0; 24 ArrayList<Bitmap> test = new ArrayList<Bitmap>(); 25 BitmapFactory.Options options = new BitmapFactory.Options(); 26 options.inSampleSize = 35; 27 do { 28 test.add(BitmapFactory.decodeFile(cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)), options)); 29 cnt++; 30 cursor.moveToNext(); 31 }while(cnt < 20); 32 cnt = 0; 33 34 l.addView(new MyView(this, test)); 35 } 36}

Java

1//Custom View 2public class MyView extends View { 3 Paint paint = new Paint(); 4 ArrayList<Bitmap> mBmps; 5 6 public MyView(Context context, ArrayList<Bitmap> bmps) { 7 super(context); 8 mBmps = new ArrayList<Bitmap>(bmps); 9 setWillNotDraw(false); 10 } 11 12 @Override 13 public void onDraw(Canvas canvas){ 14 int height = 10; 15 16 for(int i = 0; i < mBmps.size(); i++){ 17 if(i % 2 == 0){ 18 canvas.drawBitmap(mBmps.get(i), 10, height, paint); 19 height += 100; 20 }else{ 21 canvas.drawBitmap(mBmps.get(i), 200, height, paint); 22 } 23 } 24 } 25}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

MyViewのサイズはいくつですか?どこで設定されていますか?されていませんよね?
となると、サイズは0になっていると考えるのが妥当だと思います。

Viewを派生したカスタムビューのサイズを決めるには、MyViewの中でonMeasureメソッドをオーバーライドして適切な処理を行ってください。

もう一つ、LayoutParamsで指定する方法もあります。

java

1@Override 2public void onCreate(Bundle savedInstanceState){ 3 LinearLayout l = new LinearLayout(this); 4 l.setOrientation(LinearLayout.VERTICAL); 5 6 // とりあえず高さを256pxに設定 7 l.addView(new MyView(this, test), 8 new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 256)); 9

前者の方が行儀のイイやり方だと思いますが、どちらの手段を取るかはご自身でお決めください。

投稿2016/06/23 15:42

katsuko

総合スコア3471

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panasonicsite

2016/06/26 01:18

ありがとうございます! 「katsuko」さんのアドバイス通りに改良するとスクロールすることができました!! 独学でやっているので質問する人がおらず大変困っていたのですが、無事解決することができてよかったです。 本当にありがとうございました!!!
guest

0

正直に言えば、どこで何をしているかコードからわかりません。特に怪しいコードも見当たりません。しかし、1つのクラスで
複数のBitmapクラスを過度に使うことはあまりいいこととは言えないです。
ListViewを使うことはできないでしょうか?

投稿2016/06/23 14:42

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

panasonicsite

2016/06/27 17:44

回答ありがとうございます!! Bitmapクラスを使用すると速度が格段に落ちるので、本当は使用したくないです。 しかし、今私が作っているアプリは画像をグリッド表示したいので、ListViewは使用出来ない状態です。 それならGridViewを使用するのが定石だと思うのですが、Viewを大量に作ることで動作速度が極めて遅くなった為、上記のような画像描画のみを行うカスタムViewを作っています。 そこで気になるのですが、Bitmapクラスを使わずに端末内にある数千枚の画像を読み込み、操作性に不自由ない動作速度で画像をグリッド表示する方法はあるのでしょうか? Androidにプリインストールされている「アルバム」アプリは動作がめちゃくちゃ早いのでどうやって作っているのか非常に気になります。 Android NDKなどを使って、CやC++で画像取得、表示部分だけを作らないといけないのでしょうか...。 Androidアプリ作成初心者なので間違ったことを言っているかもしれないです。 その時は、ご指摘願います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問