2010-12-01 2 views
0

Это основная идея, но изображение уродливое и неровное. ЗАЧЕМ???Как сделать сложную задницу NinePatch?


public class Main extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ImageView iv = (ImageView) findViewById(R.id.iv); 
    Bitmap bmap = BitmapFactory.decodeResource(getResources(), R.drawable.btn_default_normal); 
    NinePatchDrawable npd = new NinePatchDrawable(bmap, bmap.getNinePatchChunk(), new Rect(0,0,512,512), "name"); 
    npd.mutate(); 
    npd.setBounds(new Rect(0,0,512,512)); 
    npd.invalidateSelf(); 
    Bitmap bp = Bitmap.createBitmap(512,512, Bitmap.Config.RGB_565); 
    Canvas canvas = new Canvas(bp); 
    npd.draw(canvas); 
    FileOutputStream ofo=null; 
    try { 
     ofo = openFileOutput("image", MODE_WORLD_READABLE); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    bp.compress(Bitmap.CompressFormat.PNG, 100, ofo); 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.putExtra(Intent.EXTRA_STREAM, getFileStreamPath("image").toURI()); 
    intent.setType("image/png"); 
    //startActivity(intent); 
    iv.setImageDrawable(new BitmapDrawable(bp)); 
    } 
} 
+3

Что такое «задница NinePatch»? – Dinah 2010-12-01 19:32:33

+0

Нанять лучшего художника? – schwiz 2010-12-01 19:39:11

ответ

1

Вы делаете это бесконечно сложнее, чем должно быть. Просто установите свой вид в XML следующим образом:

<TextView 
     android:background="@android:drawable/btn_default_small"   
     android:layout_width="512px" 
     android:layout_height="wrap_content" 
     android:text="NinePatch View" 
     /> 

Просто используйте TextView в качестве примера. То же самое будет работать с ImageView, View, почти любым виджетами. Важно помнить, что использовать атрибут background вместо атрибута src для ImageView. Атрибут src растянет изображение как есть, он не будет уважать данные NinePatch.

Если вы установите это делать в коде, просто используйте:

iv.setBackgroundResource(R.drawable.btn_default_small) 

В качестве примечания, какое устройство вы отображая его? Большинство мобильных телефонов имеют ширину до 480 пикселей.

Смежные вопросы