2015-11-20 5 views
1

Я знаю, что есть много вопросов, но это не работает для меня, так я вывешиваю этот вопрос:изображения тень, как дизайн материала

Я добавив круговую ImageView в моем приложении, и я хочу некоторое повышение/тень к нему, чтобы он работал на всех Api не только после 21. так что я должен делать?

это мой код:

XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" 
    > 


    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/imageView" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" 
     android:background="@drawable/mybackground" 

     /> 
</RelativeLayout> 

это mybackground в вытяжке:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <solid android:color="#42000000" /> 
    <corners android:radius="5dp" /> 
</shape> 

это мой код:

public class MainActivity extends AppCompatActivity { 
Bitmap bmp; 

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     bmp = BitmapFactory.decodeResource(getResources(), R.drawable.frames); 
     bmp = getroundedBitmap(bmp); 
     ImageView iv = (ImageView) findViewById(R.id.imageView); 
iv.setImageBitmap(bmp); 
     //iv.setBackground(new BitmapDrawable(getResources(),bmp)); 
     Outline outline = null; 
     /* if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
     // outline = new Outline(); 
      // outline.setOval(0,0,iv.getWidth(),iv.getHeight()); 
      iv.setElevation(1500); 

     }*/ 

    } 

    private Bitmap getroundedBitmap(Bitmap bmp) { 
     int targetwidth = 250; 
     int targetheight = 250; 
     Bitmap targetBitmap = Bitmap.createBitmap(targetwidth,targetheight,Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(targetBitmap); 
     Path path = new Path(); 
     path.addCircle(((float) targetwidth - 1)/2, ((float) targetheight - 1)/2, Math.min(targetwidth, targetheight)/2, Path.Direction.CCW); 
     canvas.clipPath(path); 

     Paint p = new Paint(); 
     p.setColor(Color.WHITE); 
     canvas.drawBitmap(bmp, new Rect(0, 0, bmp.getWidth(), bmp.getHeight()), new Rect(0, 0, targetwidth, targetheight), null); 

     return targetBitmap; 
    } 


} 

Пожалуйста, помогите мне вне. i ma работает в андроидной студии

ответ

0

Высота не может работать до API 21, но вы можете работать с помощью теней. Создайте тень (круговой в вашем случае) в вашем обратном направлении. Используйте слой-список как родительский элемент и градиент, чтобы создать в нем теневой слой.

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="oval"> 
      <gradient android:startColor="#d1c4e9" 
       android:endColor="@android:color/transparent" 
       android:angle="270"/> 
     </shape> 
    </item> 
    <item android:right="1dp" android:left="1dp" android:bottom="3dp"> 
     <shape android:shape="oval"> 
      <solid android:color="#673ab7"/> 
     </shape> 
    </item> 
</layer-list> 
+0

, пожалуйста, введите код, я добавил тень в mybackground, но он не отображается. и я использую moto g 1st gen с lollypop, чтобы он показывал высоту. он также не показывает это. и это комментарий, а не ответ, подберите вашу помощь, но код или ссылка будут более полезными. –

+0

добавлен код, сделайте выделение в папке res и добавьте xml в качестве фона в ImageView. –

+0

Я получаю овальную тень позади изображения, и она горизонтальная овальная –

0

Мы можем принять ImageView Внутри CardView, а высота и ширина матча с cardView попробовать один раз, он будет работать.

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