数日前から抱えていた問題を解決しようとしていますが、まだ解決策が見つかりません。しかし、私は一歩一歩そこに着いています。今、私は別の障害に遭遇しました。
ユーザーが を使用して触れたものBitmap.getpixel(int x, int y)
を返そうとしています。パイはリソースです。まだピクセル データを処理する必要はありません。テストするだけです。ということで、感動を吐き出すアタリを作りました。Color
OnTouchListener
VectorDrawable
vectordrawable.xml
TextView
Color
public class MainActivity extends AppCompatActivity {
ImageView imageView;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imageView);
textView = (TextView) findViewById(R.id.textView);
imageView.setOnTouchListener(imageViewOnTouchListener);
}
View.OnTouchListener imageViewOnTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
Drawable drawable = ((ImageView)view).getDrawable();
//Bitmap bitmap = BitmapFactory.decodeResource(imageView.getResources(),R.drawable.vectordrawable);
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
int x = (int)event.getX();
int y = (int)event.getY();
int pixel = bitmap.getPixel(x,y);
textView.setText("touched color: " + "#" + Integer.toHexString(pixel));
return true;
}
};
}
しかし、私のアプリは、に触れるとすぐに致命的なエラーが発生しImageView
、「残念ながら...」というメッセージが表示されて終了します。スタックトレースで、これを見つけました。
java.lang.ClassCastException: android.graphics.drawable.VectorDrawable cannot be cast to android.graphics.drawable.BitmapDrawable
at com.skwear.colorthesaurus.MainActivity$1.onTouch(MainActivity.java:38)
38行目はこれです。
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
私はちょっとこれに従いました。私は何を間違っていますか?だからでしょうかVectorDrawable
。を取得するにはどうすればよいColor
ですか? BitmapFactory
もキャストしようとしたことがわかりますDrawable
。VectorDrawable
API 21のように追加されたので、APIレベルの問題でもありますか?