ImageViewまたはImageButtonにて画像の一部だけを表示する方法を教えてください。

1,760 views
Skip to first unread message

led

unread,
Mar 22, 2011, 9:16:18 AM3/22/11
to 日本Androidの会
ledです。
先ほど本グループには登録したばかりのAndroid初心者です。
それなりにアプリ作成はしてきているのですが、まだまだ勉強不足で詰まっております。
過去レスは極力検索しているつもりですが、重複しておりましたらご指摘お願いします。

■質問事項
CSSでは以下のように定義し、Top値を-16、-32のように変える事で
1枚の画像の一部を表示するようにすることが出来ますが、
同様のリソース定義、または動的追加をAndroidで行うには
どのようにしたら良いででしょうか?発想変えれば簡単に出来るんじゃないかと
いう気がしてきていて、質問しさせていただきました。
できれば、dp指定で綺麗に実現したいと思うのですが・・・。

height: 48px;
width: 16px;
position: absolute;
Top: 0px;

■現状までに試した事
 1.取得したdrawableリソースをいったんビットマップに変換しマトリックスで拡大。
 Bitmap bitmap = convDrawableToBitmap(drawable);
 Matrix matrix = new Matrix();
 resizeScaleWidth = resizeWidth / bitmap.getWidth();
 resizeScaleHeight = resizeHeight / bitmap.getHeight();
 matrix.postScale(resizeScaleWidth, resizeScaleHeight);

 2.非常手段としては、表示したいものは
  Drawable.createFromStreamで取得するので
  WebViewを配置してCSS側で表示は行い、OnClickは
  JavaScript(addJavascriptInterfaceで追加したもの)を
  介してやり取りする。

以上です。よろしくお願いします。

あんざいゆき

unread,
Mar 22, 2011, 10:25:20 PM3/22/11
to android-g...@googlegroups.com
あんざいです。

Canvas でクリップするなら、Api Demo に Clipping サンプルがあります。
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/Clipping.html

また、XML で <clip> タグを使ってあらかじめ定義しておくことでも Clip 処理ができます。
http://developer.android.com/guide/topics/resources/drawable-resource.html#Clip

表示したい領域を動的に変えないのであれば2番目のほうが簡単です。


2011年3月22日22:16 led <led...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

--
あんざい ゆき
anzai...@gmail.com
twitter : @yanzm
Y.A.Mの雑記帳 http://y-anz-m.blogspot.com/

led

unread,
Mar 23, 2011, 12:10:33 AM3/23/11
to 日本Androidの会
あんざいさん

ledです。
レスありがとうございます。

なるほど…Canvasを使うんですね。やってみます。
ありがとうございました。

自力で調べた方法で、こういう方法でいいのか分かりませんが、
結局今はスクロールで実現していました。

itemView = new ImageView(m_context);

itemView.setBackgroundDrawable(m_context.getResources().getDrawable(android.R.color.white));
itemView.setAdjustViewBounds(false);
itemView.setScaleType(ImageButton.ScaleType.MATRIX);
itemView.scrollTo(0, 0);
// itemView.scrollTo(0, 46);
// XMLでは android:scrollY で指定。

以上

On Mar 23, 11:25 am, あんざいゆき <anzai.y...@gmail.com> wrote:
> あんざいです。
>
> Canvas でクリップするなら、Api Demo に Clipping サンプルがあります。
> http://developer.android.com/resources/samples/ApiDemos/src/com/examp...
>
> また、XML で <clip> タグを使ってあらかじめ定義しておくことでも Clip 処理ができます。
> http://developer.android.com/guide/topics/resources/drawable-resource...
>
> 表示したい領域を動的に変えないのであれば2番目のほうが簡単です。
>
> 2011年3月22日22:16 led <ledl...@gmail.com>:
> anzai.y...@gmail.com
> twitter : @yanzm
> Y.A.Mの雑記帳http://y-anz-m.blogspot.com/

あんざいゆき

unread,
Mar 23, 2011, 2:12:00 AM3/23/11
to android-g...@googlegroups.com
led さん

そうです。<clip> も中でやっていることは Canvas を使った clip 処理です。

 scrollTo を使う方法はよくないです。
 ボタンの大きさによって表示される領域がかわってくると思うし、
 さらに、scrollTo の引数は px 単位だったはずなので、別の解像度の
 端末だと表示がくずれると思います。

 あんざい


2011年3月23日13:10 led <led...@gmail.com>:

led

unread,
Mar 23, 2011, 2:46:53 AM3/23/11
to 日本Androidの会
あんざいさん

ledです。
おっしゃるとおりpxなので困って仕方なく

final int ICON_SIZE = 46;
int m_nIconSize_Dp = (int)TypedValue.applyDimension(

TypedValue.COMPLEX_UNIT_DIP,
(float) nDp ,

getResources().getDisplayMetrics());
itemView.scrollTo(0, m_nIconSize_Dp );

のようなことをして凌いでいた次第ですw

教えていただいた方法(Clipの方)でテストアプリでうまく表示できました。
画像がWebから取得するものなのと、やりたいのは2ステートボタン(動的変更したい)なので、
自分が使うのに妥当な設計をちょっと考えて見ます。

ありがとうございました。


On Mar 23, 3:12 pm, あんざいゆき <anzai.y...@gmail.com> wrote:
> led さん
>
> そうです。<clip> も中でやっていることは Canvas を使った clip 処理です。
>
>  scrollTo を使う方法はよくないです。
>  ボタンの大きさによって表示される領域がかわってくると思うし、
>  さらに、scrollTo の引数は px 単位だったはずなので、別の解像度の
>  端末だと表示がくずれると思います。
>
>  あんざい
>
> 2011年3月23日13:10 led <ledl...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages